Я хочу использовать ввод от пользователя в виде шаблона регулярного выражения для поиска по некоторому тексту. Он работает, но как я могу обрабатывать случаи, когда пользователь помещает символы, имеющие смысл в регулярном выражении? Например, пользователь хочет выполнить поиск 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 в соответствие с полным словом или регулярным выражением.
Ссылка ссылки: Как сопоставить целое слово, содержащее специальные символы в регулярном выражении