Если коротко, то...
Если в переменной содержатся шаблоны регулярного выражения:
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)) ^^^^^^^^^^^^^^^^^^^