Я хочу использовать ввод от пользователя в виде шаблона регулярного выражения для поиска по некоторому тексту. Он работает, но как я могу обрабатывать случаи, когда пользователь помещает символы, имеющие смысл в регулярном выражении? Например, пользователь хочет выполнить поиск Word (s): двигатель regex примет (s) как группу. Я хочу, чтобы он рассматривал его как строку "(s)". Я могу запустить replace на пользовательский ввод и заменить ( на \( и ) на \), но проблема в том, что мне нужно будет заменить все возможные символы регулярных выражений. Вы знаете лучший способ?
Экранирование строки регулярного выражения в Python
Ответ 1
Используйте для этого функцию re.escape():
побег (строка)
Возвращаемая строка со всеми неалфавитами обратной косой черты; это полезно, если вы хотите сопоставить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения в ней.
Простейший пример, поиск любого присутствия предоставленной строки, необязательно сопровождаемого 's', и возврат объекта соответствия.
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
Ответ 2
Вы можете использовать re.escape():
re.escape(строка) Возвращаемая строка со всеми неалфавитными спицами; это полезно, если вы хотите сопоставить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения в ней.
>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
Ответ 3
К сожалению, re.escape() не подходит для заменяющей строки:
>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'
Решение заключается в замене в лямбда:
>>> re.sub('a', lambda _: '_', 'aa')
'__'
потому что возвращаемое значение лямбда обрабатывается re.sub() как литеральная строка.
Ответ 4
Попробуйте:
\ Q и \E в качестве якорей
Поместите условие Or в соответствие с полным словом или регулярным выражением.
Ссылка ссылки: Как сопоставить целое слово, содержащее специальные символы в регулярном выражении