Вы используете python 2.x или 3.0?
Если вы используете 2.x, попробуйте сделать строку регулярного выражения escape-строкой Unicode с 'u'. Поскольку это регулярное выражение, рекомендуется сделать строку регулярного выражения необработанной строкой с 'r'. Также излишне помещать весь узор в круглые скобки.
re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)
http://docs.python.org/tutorial/introduction.html#unicode-strings
Редактировать:
Также рекомендуется использовать флаг re.UNICODE / re.U / (? U) для регулярных выражений Unicode, но он влияет только на псевдонимы классов символов, такие как \ w или \ b, из которых этот шаблон не использует ни одного и поэтому не будет быть затронутым.
u
иr
префиксы. Это круто!SyntaxError: invalid syntax
в Python 3.6Используйте строки Unicode . Используйте флаг 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 بسم الله الرحمن الرحيم
Прочтите статью Джоэла Спольски под названием «Абсолютный минимум, что каждый разработчик программного обеспечения должен абсолютно точно знать о Unicode и наборах символов (без оправданий!)»
источник
re
в python, вы должны знать, что он не поддерживает свойство символа Unicode (например\p{L}
). pypi.python.org/pypi/regex делает.re.UNICODE
флаг бесполезно здесь, так как это затрагивает только сокращенные классы символов\w
,\d
,\s
.