Выход из строки регулярного выражения в Python - PullRequest
197 голосов
/ 11 ноября 2008

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

Ответы [ 4 ]

275 голосов
/ 11 ноября 2008

Используйте для этого функцию re.escape():

4.2.3 re Содержимое модуля

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

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

Упрощенный пример: поиск в любом случае предоставленной строки, за которой необязательно следует 's', и возврат объекта соответствия.

def simplistic_plural(word, text):
    word_or_plural = re.escape(word) + 's?'
    return re.match(word_or_plural, text)
48 голосов
/ 11 ноября 2008

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

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

>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
2 голосов
/ 23 февраля 2017

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

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

Решение состоит в том, чтобы поместить замену в лямбду:

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

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

0 голосов
/ 23 сентября 2017

Пожалуйста, попробуйте:

\ Q и \ E как якоря

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...