Python вставить переменную в регулярное выражение

Использование переменной в регулярном выражении Python

Вместо «variable» должна быть переменная,в которую будут подставятся разные строки, а как это преподнести правильно не знаю.

Ответы (2 шт):

reg_exp = r'\'' + variable + r'\s\'' mt=re.findall(reg_exp) 

Если коротко, то.

Если в переменной содержатся шаблоны регулярного выражения:

reg_exp = r"'<>\s'".format(variable) 

Если текст переменной содержит буквальный текст:

reg_exp = r"'<>\s'".format(re.escape(variable)) 

Регулярные выражения в Python задаются с помощью строковых литералов, поэтому проблема использования переменной в регулярном выражении в Python сводится к проблеме использования переменных в строковом литерале.

Способы добавления переменной в строку

Существует множество способов:

  • Конкатенация строк (предложена Эникейщиком): reg_exp = r»‘» + variable + r»\s'»
  • Оператор форматирования строк %s : reg_exp = r»‘%s\s'» % variable
  • Метод str.format : reg_exp = r»‘<>\s'».format(variable) или reg_exp = r»‘\s'».format(x=variable)
  • Интерполяция строк (доступна с Python 3.6): reg_exp = rf»‘\s'»

См. демо онлайн (Python 3.5, без поддержки интерполяции).

Что выбрать?

Интерполяция появилась относительно недавно, она доступна только в Python начиная с версии 3.5. Она удобна, так как переменные вставляются в строковой литерал как есть в фигурных скобках. Однако надо помнить, что двойные фигурные скобки задают буквальные фигурные скобки, f»>» = > .

Метод str.format очень похож на интерполяцию. Задав один аргумент, его можно повторять сколько угодно раз с помощью , где x — порядковый номер аргумента. r»»:\s+»».format(variable) объявляет выражение ‘abc’:\s+’abc’ . Именные аргументы упрощают (иногда и сокращают) использование переменных в строке. r»»:\s+»».format(x=variable) в результате даст то же выражение, что и в предыдущем примере. При задании нескольких аргументов, которые используются лишь один раз в строке, можно использовать <> без указания индекса: another=»def»;print(r»‘<>‘:\s+’<>‘».format(variable,another)) даст выражение ‘abc’:\s+’def’ .

При конкатенации строк нет проблем с «экранированием» символов фигурных скобок (см. следующий абзац), но конструкция получается менее удобной для чтения и есть риск «забыть» какой-нибудь префикс (например, r ).

Читайте также:  Html select multiple bootstrap

Интерполяция и фигурные скобки

Будьте осторожны с фигурными скобками при интерполяции: двойные фигурные скобки задают буквальные символы < и >, что бывает очень важно при использовании интервальных квантификаторов:

# Интерполяция и фигурные скобки print(f"") # => abc print(f"<>") # => print(f"<<>>") # =>

То же относится и к методу str.format :

Специальные символы в переменной

Если текст переменной может содержать специальные метасимволы регулярных выражений (например ( , ) , [ , + , * и т.д.), рекомендуется использовать метод re.escape :

reg_exp = r"'<>\s'".format(re.escape(variable)) ^^^^^^^^^^^^^^^^^^^ 

Источник

Оцените статью