Экранирование строки регулярного выражения в Python

Я хочу использовать ввод от пользователя в виде шаблона регулярного выражения для поиска по некоторому тексту. Он работает, но как я могу обрабатывать случаи, когда пользователь помещает символы, имеющие смысл в регулярном выражении? Например, пользователь хочет выполнить поиск Word (s) : механизм regex примет группу (s) . Я хочу, чтобы это воспринималось как строка "(s)" . Я могу запустить replace на пользовательский ввод и заменить ( с \( и ) с помощью \) но проблема в том, что мне нужно будет заменить все возможные символы регулярных выражений. Вы знаете какой-нибудь лучший способ?

Используйте re.escape() для этого:

4.2.3. Содержание модуля

побег (строка)

Возвращаемая строка со всеми неалфавитными спицами; это полезно, если вы хотите совместить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения.

Простейший пример, поиск любого присутствия предоставленной строки, необязательно сопровождаемого 's', и возврат объекта соответствия.

 def simplistic_plural(word, text): word_or_plural = re.escape(word) + 's?' return re.match(word_or_plural, text) 

Вы можете использовать re.escape () :

re.escape (string) Возвращаемая строка со всеми неалфавитами обратной косой черты; это полезно, если вы хотите совместить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения.

 >>> import re >>> re.escape('^a.*$') '\\^a\\.\\*\\$' 

К сожалению, re.escape() не подходит для строки замены:

 >>> re.sub('a', re.escape('_'), 'aa') '\\_\\_' 

Решение заключается в замене в лямбда:

 >>> re.sub('a', lambda _: '_', 'aa') '__' 

потому что возвращаемое значение лямбда обрабатывается re.sub() в виде строки.

Попробуйте:

\ Q и \ E в качестве якорей

Поместите условие Or для соответствия полному слову или регулярному выражению.

Ссылка ссылки: как совместить целое слово, которое включает специальные символы в регулярном выражении