Zwraca łańcuch z odwrotnym ukośnikiem wszystkich znaków innych niż alfanumeryczne; jest to przydatne, jeśli chcesz dopasować dowolny literał ciągu, który może zawierać metaznaki wyrażenia regularnego.
Od wersji Python 3.7 re.escape()została zmieniona tak, aby zmieniać znaczenie tylko znaków, które mają znaczenie dla operacji regex.
We wzorcu wyszukiwania uwzględnij \również szukane znaki. Masz zamiar używać \do ucieczki swoje postacie, więc trzeba się uciec
, że jak dobrze.
Umieść wzorzec wyszukiwania w nawiasach , np. ([\"])Tak, aby
wzorzec podstawienia mógł używać znalezionego znaku, gdy dodaje go \przed nim. (To właśnie
\1robi: używa wartości pierwszej grupy w nawiasach).
rPrzed r'([\"])'środkami jest to surowy ciąg . Nieprzetworzone łańcuchy używają różnych reguł unikania odwrotnych ukośników. Aby pisać ([\"])jako zwykły ciąg, musisz podwoić wszystkie ukośniki odwrotne i napisać '([\\"])'. Nieprzetworzone łańcuchy są bardziej przyjazne, gdy piszesz wyrażenia regularne.
We wzorcu podstawiania musisz uciekać, \aby odróżnić go od ukośnika odwrotnego poprzedzającego grupę podstawień, np . \1Stąd r'\\\1'. Aby zapisać
to jako zwykły ciąg, potrzebujesz '\\\\\\1'- i nikt tego nie chce.
Użyj repr () [1: -1]. W tym przypadku cudzysłowy nie muszą być znakami ucieczki. Wycinek [-1: 1] służy do usunięcia pojedynczego cudzysłowu z początku i końca.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck":\
>>>print repr(x)[1:-1]
I\'m "stuck":\\
A może po prostu chcesz uciec od frazy, którą chcesz wkleić do swojego programu? Jeśli tak, zrób to:
W pythonie 3.4, gdzie wszystkie ciągi znaków są w formacie Unicode, niestety nie wydaje się to działać. Zamiast tego print(repr("I'm stuck")[1:-1])drukuje I'm stuck.
dantiston
3
Jak wspomniano powyżej, odpowiedź zależy od Twojego przypadku. Jeśli chcesz zmienić znaczenie łańcucha dla wyrażenia regularnego, powinieneś użyć funkcji re.escape (). Ale jeśli chcesz uciec od określonego zestawu znaków, użyj tej funkcji lambda:
>>> 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\" :\\
Odpowiedzi:
Posługiwać się
re.escape
Powtarzam to tutaj:
Od wersji Python 3.7
re.escape()
została zmieniona tak, aby zmieniać znaczenie tylko znaków, które mają znaczenie dla operacji regex.źródło
regex.escape(pattern,string,special_only=True
Jestem zaskoczony, że nikt nie wspomniał o używaniu wyrażeń regularnych poprzez
re.sub()
:Ważne uwagi:
\
również szukane znaki. Masz zamiar używać\
do ucieczki swoje postacie, więc trzeba się uciec , że jak dobrze.([\"])
Tak, aby wzorzec podstawienia mógł używać znalezionego znaku, gdy dodaje go\
przed nim. (To właśnie\1
robi: używa wartości pierwszej grupy w nawiasach).r
Przedr'([\"])'
środkami jest to surowy ciąg . Nieprzetworzone łańcuchy używają różnych reguł unikania odwrotnych ukośników. Aby pisać([\"])
jako zwykły ciąg, musisz podwoić wszystkie ukośniki odwrotne i napisać'([\\"])'
. Nieprzetworzone łańcuchy są bardziej przyjazne, gdy piszesz wyrażenia regularne.\
aby odróżnić go od ukośnika odwrotnego poprzedzającego grupę podstawień, np .\1
Stądr'\\\1'
. Aby zapisać to jako zwykły ciąg, potrzebujesz'\\\\\\1'
- i nikt tego nie chce.źródło
Użyj repr () [1: -1]. W tym przypadku cudzysłowy nie muszą być znakami ucieczki. Wycinek [-1: 1] służy do usunięcia pojedynczego cudzysłowu z początku i końca.
A może po prostu chcesz uciec od frazy, którą chcesz wkleić do swojego programu? Jeśli tak, zrób to:
źródło
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
drukujeI'm stuck
.Jak wspomniano powyżej, odpowiedź zależy od Twojego przypadku. Jeśli chcesz zmienić znaczenie łańcucha dla wyrażenia regularnego, powinieneś użyć funkcji re.escape (). Ale jeśli chcesz uciec od określonego zestawu znaków, użyj tej funkcji lambda:
źródło
To nie jest takie trudne:
źródło
characters
to lepiej, żeby był pierwszym!Jeśli chcesz zamienić tylko niektóre znaki, możesz użyć tego:
źródło