Есть ли у Python функция, которую я могу использовать для вызова специальных символов в регулярном выражении?
Например, I'm "stuck" :\
должен стать I\'m \"stuck\" :\\
.
Есть ли у Python функция, которую я могу использовать для вызова специальных символов в регулярном выражении?
Например, I'm "stuck" :\
должен стать I\'m \"stuck\" :\\
.
Используйте re.escape
>>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com
Повторяя это здесь:
re.escape (строка)
Возвращает строку со всеми не алфавитно-цифровыми символами с обратной косой чертой; это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярного выражения.
Я удивлен, что никто не упомянул использование регулярных выражений через re.sub()
:
import re
print re.sub(r'([\"])', r'\\\1', 'it\ "this"') # it \"this\"
print re.sub(r"([\'])", r'\\\1', 'it\ "this"') # it\ "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\ "this"') # it\'s\ \"this\"
Важно отметить:
\
, а также характер (ы), который вы ищете.
Вы собираетесь использовать \
, чтобы избежать ваших персонажей, поэтому вам нужно сбежать
это также.([\"])
, так что подстановка
шаблон может использовать найденный символ, когда он добавляет \
перед ним. (То, что
\1
делает: использует значение первой группы в скобках.)r
перед r'([\"])'
означает, что это необработанная строка. Необработанные строки используют разные
правила для сбрасывания обратных косых черт. Чтобы написать ([\"])
как обычную строку, вам нужно будет
удвоить все обратные косые черты и написать '([\\"])'
. Необработанные строки более дружелюбны, когда
вы пишете регулярные выражения.\
, чтобы отличить его от
обратная косая черта, которая предшествует группе замещения, например. \1
, следовательно r'\\\1'
. Написать
что в качестве простой строки вам понадобится '\\\\\\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(). Но если вы хотите экранировать определенный набор символов, используйте эту лямбда-функцию:
>>> 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\" :\\
Это не так сложно:
def escapeSpecialCharacters ( text, characters ):
for character in characters:
text = text.replace( character, '\\' + character )
return text
>>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' )
'I\\\'m \\"stuck\\" :\\'
>>> print( _ )
I\'m \"stuck\" :\
Если вы хотите заменить только некоторые символы, вы можете использовать это:
import re
print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")