if re.search(my_regex, subject, re.IGNORECASE): etc.
Обратите внимание на использование re.escape, чтобы, если в вашем тексте есть специальные символы, они не интерпретировались как таковые.
Ответ 2
Начиная с python 3.6, вы также можете использовать интерполяцию буквенных строк, "f-strings". В вашем конкретном случае решением будет:
if re.search(rf"\b(?=\w){TEXTO}\b(?!\w)", subject, re.IGNORECASE): ...do something
Редактировать:
Поскольку в комментарии было несколько вопросов о том, как обращаться со специальными символами, я хотел бы расширить свой ответ:
необработанные строки ('r'):
Одна из основных концепций, которую вы должны понимать при работе со специальными символами в регулярных выражениях, заключается в различении строковых литералов и самого регулярного выражения. Это очень хорошо объяснено здесь:
Вкратце:
Допустим, вместо поиска границы слова \b после TEXTO вы хотите сопоставить строку \boundary. Вы должны написать:
TEXTO = "Var" subject = r"Var\boundary"
if re.search(rf"\b(?=\w){TEXTO}\\boundary(?!\w)", subject, re.IGNORECASE): print("match")
Это работает только потому, что мы используем необработанную строку (регулярному выражению предшествует 'r'), в противном случае мы должны написать "\\\\ граница" в регулярном выражении (четыре обратных косых черты). Кроме того, без '\r' \b' преобразовался бы больше не в границу слова, а в пробел!
re.escape:
По сути, обратная косая черта ставится перед любым специальным символом. Следовательно, если вы ожидаете использовать специальный символ в TEXTO, вам нужно написать:
if re.search(rf"\b(?=\w){re.escape(TEXTO)}\b(?!\w)", subject, re.IGNORECASE): print("match")
ПРИМЕЧАНИЕ: Для любой версии >= python 3.7: !, ", %', ,/, :;, <=, >@, `,,, и,, не экранируются. В регулярном выражении по-прежнему экранируются только специальные символы, имеющие значение. _ не экранируется начиная с Python 3.3.(см. здесь)
Фигурные скобки:
Если вы хотите использовать кванторы внутри регулярного выражения с использованием f-строк, вам придется использовать двойные фигурные скобки. Допустим, вы хотите сопоставить TEXTO, за которым следуют ровно 2 цифры.:
if re.search(rf"\b(?=\w){re.escape(TEXTO)}\d{{2}}\b(?!\w)", subject, re.IGNORECASE): print("match")
Ответ 3
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):
Это вставит то, что находится в TEXTO, в регулярное выражение в виде строки.