Экранирование специальных символов регулярных выражений в строке Python
есть ли у Python функция, которую я могу использовать для экранирования специальных символов в регулярном выражении?
например, I'm "stuck" :
должны стать I'm "stuck" :
.
6 ответов:
использовать re.побег
re.escape(string) >>> re.escape('\ a.*$') '\\\ a\.\*\$' >>> print(re.escape('\ a.*$')) \\ a\.\*$ >>> re.escape('www.stackoverflow.com') 'www\.stackoverflow\.com' >>> print(re.escape('www.stackoverflow.com')) www\.stackoverflow\.com
см.:http://docs.python.org/library/re.html#module-contents
повторять его здесь:
re.escape (string)
возвращаемая строка со всеми не буквенно-цифровыми обратными косыми чертами; это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярных выражений.
Я удивлен, что никто не упоминал использование регулярных выражений через
re.sub()
:import re print re.sub(r'([\"])', r'\', 'it\'s "this"') # it's \"this\" print re.sub(r"([\'])", r'\', 'it\'s "this"') # it\'s "this" print re.sub(r'([\" \'])', r'\', 'it\'s "this"') # it\'s\ \"this\"
важные вещи, чтобы отметить:
- на поиск узор, включают в себя
\
а также характер(Ы), который вы ищете. Вы собираетесь использовать\
чтобы избежать ваших персонажей, так что вам нужно бежать это как хорошо.- поставить скобки поиск узор, например,
([\"])
, так что замена шаблон может использовать найденный символ, когда он добавляет\
перед ним. (Вот чтоdoes: использует значение первой группы в скобках.)
- The
r
передr'([\"])'
это "сырые" строки. Необработанные строки используют разные правила для экранирования обратной косой черты. Писать([\"])
как простая строка, вам нужно будет удвойте все обратные косые черты и напишите'([\"])'
. Необработанные строки более дружелюбны, когда ты пишешь регулярно выражения.- на замена шаблон, вам нужно бежать
\
чтобы отличить его от обратная косая черта, предшествующая группе подстановок, например, следовательно,
r'\'
. Писать это как простая строка, вам понадобится'\\\1'
- и никто этого не хочет.
используйте repr () [1:-1]. В этом случае двойные кавычки не нужно экранировать. Срез [-1:1] - это удаление одинарной кавычки из начала и конца.
>>> x = raw_input() I'm "stuck" :\ >>> print x I'm "stuck" :\ >>> print repr(x)[1:-1] I\'m "stuck" :\
или, может быть, вы просто хотите, чтобы избежать фразу, чтобы вставить в вашу программу? Если да, то сделайте следующее:
>>> raw_input() I'm "stuck" :\ 'I\'m "stuck" :\'
Как уже упоминалось выше, ответ зависит от вашего случая. Если вы хотите экранировать строку для регулярного выражения, то вы должны использовать re.бежать.)( Но если вы хотите избежать определенного набора символов, то используйте эту лямбда-функцию:
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s) >>> s = raw_input() I'm "stuck" :\ >>> print s I'm "stuck" :\ >>> print escape(s, "\", ['"']) I'm \"stuck\" :\