Добавление входной переменной в регулярное выражение - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь создать код, который находит все предпочтительные расширения файлов и затем перемещает их в заданную папку. Код работает, но мне нужно ввести расширения файла вручную внутри файла. То, что я пытаюсь сделать, это добавить входную переменную и поместить ее в re.compile (), поэтому мне не нужно редактировать файл всякий раз, когда он мне нужен для разных типов файлов.

Эта часть I необходимо отредактировать:

# Go through the listFiles and find specific file types.
picRegex = re.compile(r'.*\.jpg|.*\.png')
fileMatches = list(filter(picRegex.match, listFiles)

Это работает для типов файлов, которые уже есть в моем коде, но, как я уже сказал, я хочу, чтобы он был более гибким. Есть ли способ, которым я могу улучшить это? Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Создание регулярного выражения с помощью строковых методов:

file_extensions = ['.png','.jpg']
regex = '.*(%s)' % '|'.join(map(re.escape, file_extensions))
filename_matches = list(filter(re.compile(regex).fullmatch, filenames)

Лучше, вообще не используйте регулярные выражения, но endswith:

file_extensions = tuple(['.png','.jpg'])
filename_matches = [f for f in filenames if f.endswith(file_extensions)]
0 голосов
/ 16 февраля 2020

Регулярные выражения - это просто строки, которые вы передаете re.compile и друзьям. В вашем распоряжении полная палитра Python форматирования строк.

Возможно, что-то вроде этого, тогда?

picPegex = re.compile('|'.join([r'.*\.{0}'.format(x) for x in ('jpg', 'png')]))

Если вам всегда нужно это в конце строки, возможно, возможно просто

if thing.endswith(tuple(['.{0}' for x in ('jpg', 'png')])):
    print('yowza')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...