Возвращает строку, содержащую обратную косую черту, отличную от буквенно-цифровых; это полезно, если вы хотите сопоставить произвольную буквальную строку, которая может содержать метасимволы регулярного выражения.
Начиная с Python 3.7 re.escape()был изменен, чтобы экранировать только символы, которые имеют значение для операций с регулярными выражениями.
В шаблон поиска укажите, \а также символы, которые вы ищете. Вы собираетесь использовать, \чтобы убежать от своих персонажей, поэтому вам также нужно избегать
этого .
Заключите шаблон поиска в круглые скобки , например ([\"]), чтобы
шаблон подстановки мог использовать найденный символ, когда он добавляется \перед ним. (Вот что
\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":\\
Или, может быть, вы просто хотите избежать фразы, чтобы вставить ее в свою программу? Если да, сделайте это:
Это не сработает, если строка является Unicode, потому что у вас будет u, и вам нужно будет запуститьrepr(x)[2:-1]
Антуан Пелисс
В python3.4, где все строки являются Unicode, к сожалению, это вообще не работает. Вместо этого print(repr("I'm stuck")[1:-1])печатает I'm stuck.
dantiston 04
3
Как уже было сказано выше, ответ зависит от вашего случая. Если вы хотите экранировать строку для регулярного выражения, вам следует использовать 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\" :\\
Ответы:
использование
re.escape
Повторяя это здесь:
Начиная с Python 3.7
re.escape()
был изменен, чтобы экранировать только символы, которые имеют значение для операций с регулярными выражениями.источник
regex.escape(pattern,string,special_only=True
Я удивлен, что никто не упомянул использование регулярных выражений через
re.sub()
:Важно отметить:
\
а также символы, которые вы ищете. Вы собираетесь использовать,\
чтобы убежать от своих персонажей, поэтому вам также нужно избегать этого .([\"])
, чтобы шаблон подстановки мог использовать найденный символ, когда он добавляется\
перед ним. (Вот что\1
делает: использует значение первой группы в скобках.)r
передr'([\"])'
означает, что это необработанная строка . Необработанные строки используют разные правила для экранирования обратной косой черты. Чтобы писать([\"])
как обычную строку, вам нужно удвоить все обратные косые черты и написать'([\\"])'
. Необработанные строки более удобны при написании регулярных выражений.\
чтобы отличить его от обратной косой черты, которая предшествует группе подстановки, например\1
, следовательноr'\\\1'
. Чтобы написать это как простую строку, вам понадобится'\\\\\\1'
- а это никому не нужно .источник
Используйте repr () [1: -1]. В этом случае двойные кавычки не нужно экранировать. Срез [-1: 1] предназначен для удаления одинарной кавычки в начале и в конце.
Или, может быть, вы просто хотите избежать фразы, чтобы вставить ее в свою программу? Если да, сделайте это:
источник
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
печатаетI'm stuck
.Как уже было сказано выше, ответ зависит от вашего случая. Если вы хотите экранировать строку для регулярного выражения, вам следует использовать re.escape (). Но если вы хотите избежать определенного набора символов, используйте эту лямбда-функцию:
источник
Это не так уж и сложно:
источник
characters
них, лучше быть первой!Если вы хотите заменить только некоторые символы, вы можете использовать это:
источник