#python #regex #python-3.x
#python #регулярное выражение #python-3.x
Вопрос:
Мой скрипт на python выполняет следующее:
- возьмите данные корневого каталога от пользователя.
- сканируйте все подкаталоги на наличие файлов изображений.
- создайте список всех допустимых имен файлов.
где допустимое расширение файла:
"<DDMMYY><a 6 letter word><a 8 letter OR digit word><coutner>_Plot<3 digit number>_row<3 digit number>.jpg"
например:
«190419yotamryotam123001_Plot003_row004.jpg «
Я работаю с .json в качестве файла конфигурации, поэтому я хочу иметь запись для хранения значения регулярного выражения для формата расширения файла.
Я предоставил следующее регулярное выражение:
FORMAT = r'([0-3][0-9][0-1][0-9][0-9][0-9])\([a-zA-Z]{6})\([a-zA-Z0-9]{8})\\d{4}_Plot\d{3}_row\d{3}\.[jpeg]'
Тем не менее, каждый раз, когда я запускаю прикрепленный код, я продолжаю получать «None» в качестве вывода из re.match()
match = re.match(FORMAT, "190419yotamryotam123001_Plot003_row004.jpg")
print(match)
Есть идеи по изменениям, которые заставят его работать?
Комментарии:
1. Ваши
\d{4}
совпадения, а затем 4
d
с.\.[jpeg]
соответствует a, а затем любому символу, а затем
j
илиp
илиe
илиg
2. Поскольку вы используете необработанную строку (
r'...'
)\
, она сохраняется как две обратные косые черты, а не одна.\\d
Соответствует трем обратным косым чертам, затем цифре. Попробуйте распечататьFORMAT
, и вы поймете, что я имею в виду. Удвоение обратной косой черты сводит на нет цель использования необработанной строки.
Ответ №1:
импортировать повторно текст = "190419\yotamr\yotam123\0001_Plot003_row004.jpg " формат = r"[0-9][0-9][0-9][0-9][0-9][0-9]\[ a-zA-Z]{6}\[a-zA-Z0-9]{8}\[0-9]{4} _Плот[0-9]{3}_row[0-9]{3}.jpg" результат = повторный поиск (формат, текст) печать (результат)
Комментарии:
1. Спасибо, Гохан, теперь я вижу проблему. Когда я загружаю ключ «формат» из . в файле json я получаю строку, а не регулярное выражение. есть идеи, как это решить?
Ответ №2:
У вас есть ошибки в вашем регулярном выражении. Вот правильное:
FORMAT2 = re.compile(r'([0-3][0-9][0-1]([0-9]{3}))\([a-zA-Z]{6})\([a-zA-Z0-9]{8})\([0-9]{4})_Plot([0-9]{3})_row([0-9]{3}).jpe?g')
>>> print(re.search(FORMAT2, "190419\yotamr\yotam123\0001_Plot003_row004.jpg"))
<_sre.SRE_Match object; span=(0, 46), match='190419\yotamr\yotam123\0001_Plot003_row004.jpg>
Также не забудьте использовать r
предикат в строках регулярных выражений: r'WAKA[0-9]WAKA'
и для экранирования строки, которую вы проверяете ( r
например, с помощью предиката или экранирования вручную), потому что ваша строка:
"190419yotamryotam123001_Plot003_row004.jpg"
^
here--|
содержит нулевой байт ''
, который преобразуется в 'x00'
.