Python'un normal ifadedeki özel karakterlerden kaçmak için kullanabileceğim bir işlevi var mı?
Örneğin I'm "stuck" :\olmalı I\'m \"stuck\" :\\.
Python'un normal ifadedeki özel karakterlerden kaçmak için kullanabileceğim bir işlevi var mı?
Örneğin I'm "stuck" :\olmalı I\'m \"stuck\" :\\.
Yanıtlar:
kullanım 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
Burada tekrar ediyorum:
re.escape (dize)
Tüm alfanümerik olmayan ters eğik çizgi ile dizeyi döndür; Bu, içinde normal ifade meta karakterleri olabilecek rastgele bir değişmez dizeyle eşleştirmek istiyorsanız kullanışlıdır.
Python 3.7'den itibaren re.escape(), yalnızca regex işlemleri için anlamlı olan karakterlerden kaçış için değiştirildi.
regex.escape(pattern,string,special_only=True
Hiç kimsenin şu yolla normal ifadeler kullandığından bahsetmemesine şaşırdım re.sub():
import re
print re.sub(r'([\"])', r'\\\1', 'it\'s "this"') # it's \"this\"
print re.sub(r"([\'])", r'\\\1', 'it\'s "this"') # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"') # it\'s\ \"this\"
Dikkat edilmesi gereken önemli şeyler:
\aradığınız karakter (ler) yanı sıra. Sen kullanarak olacağız \kaçmak gerekir, böylece karakterleri kaçmayı
o sıra.([\"]), ikame
modeli \önüne eklendiğinde bulunan karakteri kullanabilir . (İşte
\1bu: ilk parantezli grubun değerini kullanır.)rÖnünde r'([\"])'vasıtasıyla bir var çiğ dize . Ham dizeler ters eğik çizgiden kaçmak için farklı kurallar kullanır. ([\"])Düz bir dize olarak yazmak için , tüm ters eğik çizgileri ikiye katlamanız ve yazmanız gerekir '([\\"])'. Normal ifadeler yazarken ham dizeler daha dost canlısıdır.\örneğin bir ikame grubu öncesinde ters eğik çizgi, ayırmak için \1dolayısıyla r'\\\1'. Bunu düz bir dizge olarak yazmak
için ihtiyacınız olacak '\\\\\\1'- ve kimse bunu istemiyor.Repr () [1: -1] kullanın. Bu durumda, çift tırnaklardan kaçınılmasına gerek yoktur. [-1: 1] dilimi, tek alıntıyı başından ve sonundan kaldırmaktır.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\
Ya da belki sadece programınıza yapıştırmak için bir ifadeden kaçmak istiyorsunuz? Eğer öyleyse, şunu yapın:
>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])baskılar I'm stuck.
Yukarıda belirtildiği gibi, cevap durumunuza bağlıdır. Bir düzenli ifade için bir dizeden kaçış yapmak istiyorsanız, re.escape () kullanmalısınız. Ancak belirli bir karakter kümesinden çıkış yapmak istiyorsanız, bu lambda işlevini kullanın:
>>> 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\" :\\
O kadar da zor değil:
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\" :\
characters, ilk de olsa iyi olur!
Yalnızca bazı karakterleri değiştirmek istiyorsanız, bunu kullanabilirsiniz:
import re
print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")