Использование переменной в регулярном выражении Python
📁 python, ии
Салют! Помогите пожалуйста решить казалось бы тривиальную, но за неимением опыта в программировании,абсолютно непосильную мне задачку :)
mt=re.findall(r'\'""variable""\s\'')Вместо ""variable"" должна быть переменная,в которую будут подставятся разные строки, а как это преподнести правильно не знаю.
Если коротко, то...
Если в переменной содержатся шаблоны регулярного выражения:
reg_exp = r""'{}\s'"".format(variable)reg_exp = fr""'{variable}\s'""Если текст переменной содержит буквальный текст:
reg_exp = r""'{}\s'"".format(re.escape(variable))reg_exp = fr""'{re.escape(variable)}\s'""Регулярные выражения в Python задаются с помощью строковых литералов, поэтому проблема использования переменной в регулярном выражении в Python сводится к проблеме использования переменных в строковом литерале.
Способы добавления переменной в строку
Существует множество способов:
- Конкатенация строк ():
reg_exp = r""'"" + variable + r""\s'"" - Оператор форматирования строк
%s:reg_exp = r""'%s\s'"" % variable - :
reg_exp = r""'{}\s'"".format(variable)илиreg_exp = r""'{x}\s'"".format(x=variable) - Интерполяция строк (доступна с Python 3.6):
reg_exp = rf""'{variable}\s'""
См. (Python 3.7.3).
Что выбрать?
Интерполяция появилась относительно недавно, она доступна только в Python начиная с версии 3.5. Она удобна, так как переменные вставляются в строковой литерал как есть в фигурных скобках. Однако надо помнить, что двойные фигурные скобки задают буквальные фигурные скобки, f""{{"" = {, а f""}}"" = }.
Метод str.format очень похож на интерполяцию. Задав один аргумент, его можно повторять сколько угодно раз с помощью {x}, где x — порядковый номер аргумента. r""'{0}':\s+'{0}'"".format(variable) объявляет выражение 'abc':\s+'abc'. Именные аргументы упрощают (иногда и сокращают) использование переменных в строке. r""'{x}':\s+'{x}'"".format(x=variable) в результате даст то же выражение, что и в предыдущем примере. При задании нескольких аргументов, которые используются лишь один раз в строке, можно использовать {} без указания индекса: another=""def"";print(r""'{}':\s+'{}'"".format(variable,another)) даст выражение 'abc':\s+'def'.
При конкатенации строк нет проблем с ""экранированием"" символов фигурных скобок (см. следующий абзац), но конструкция получается менее удобной для чтения и есть риск ""забыть"" какой-нибудь префикс (например, r).
Интерполяция и фигурные скобки
Будьте осторожны с фигурными скобками при интерполяции: двойные фигурные скобки задают буквальные символы { и }, что бывает очень важно при использовании интервальных квантификаторов:
# Интерполяция и фигурные скобкиprint(f""{variable}"")# => abcprint(f""{{variable}}"")# => {variable}print(f""{{{variable}}}"")# => {abc}То же относится и к методу str.format:
print(""{{}}"".format(variable))# => {}Специальные символы в переменной
Если текст переменной может содержать специальные метасимволы регулярных выражений (например (, ), [, +, * и т.д.), рекомендуется использовать метод re.escape:
reg_exp = r""'{}\s'"".format(re.escape(variable)) ^^^^^^^^^^^^^^^^^^^ Войдите чтобы оставить ответ