Czy używasz Pythona 2.x lub 3.0?
Jeśli używasz 2.x, spróbuj przekształcić ciąg wyrażenia regularnego w łańcuch znaków ucieczki unicode z „u”. Ponieważ jest to wyrażenie regularne, dobrą praktyką jest uczynienie łańcucha wyrażenia regularnego nieprzetworzonym ciągiem z „r”. Również umieszczanie całego wzoru w nawiasach jest zbędne.
re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)
http://docs.python.org/tutorial/introduction.html#unicode-strings
Edytować:
Dobrą praktyką jest również używanie flagi re.UNICODE / re.U / (? U) dla wyrażeń regularnych Unicode, ale ma to wpływ tylko na aliasy klas znaków, takie jak \ w lub \ b, których ten wzorzec nie używa, więc nie mieć wpływ.
u
ir
przedrostki. To fajnie!SyntaxError: invalid syntax
in Python 3.6Użyj ciągów znaków Unicode . Użyj flagi re.UNICODE .
>>> myre = re.compile(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', re.UNICODE) >>> myre <_sre.SRE_Pattern object at 0xb20b378> >>> mystr = u'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ' >>> result = myre.sub('', mystr) >>> len(mystr), len(result) (38, 22) >>> print result بسم الله الرحمن الرحيم
Przeczytaj artykuł Joela Spolsky'ego zatytułowany Absolutne minimum Każdy programista Absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków (bez wymówek!)
źródło
re
w Pythonie, musisz wiedzieć, że nie obsługuje on właściwości znaków Unicode (takich jak\p{L}
). pypi.python.org/pypi/regex robi.re.UNICODE
flaga jest tu bezużyteczne, ponieważ wpływa jedynie skrótowym klas postaci\w
,\d
,\s
.