¿Está usando python 2.xo 3.0?
Si está utilizando 2.x, intente convertir la cadena de expresiones regulares en una cadena de escape unicode, con 'u'. Dado que es una expresión regular, es una buena práctica hacer que su cadena de expresiones regulares sea una cadena sin formato, con 'r'. Además, poner todo su patrón entre paréntesis es superfluo.
re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)
http://docs.python.org/tutorial/introduction.html#unicode-strings
Editar:
También es una buena práctica usar el indicador re.UNICODE / re.U / (? U) para expresiones regulares Unicode, pero solo afecta a los alias de clases de caracteres como \ w o \ b, de los cuales este patrón no usa ninguno y, por lo tanto, no lo haría. ser afectado por.
u
yr
. ¡Eso es muy bonito!SyntaxError: invalid syntax
en Python 3.6Utilice cadenas unicode . Utilice la bandera 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 بسم الله الرحمن الرحيم
Lea el artículo de Joel Spolsky titulado El mínimo absoluto que todo desarrollador de software debe conocer absoluta y positivamente sobre Unicode y los conjuntos de caracteres (¡sin excusas!)
fuente
re
en Python, debe saber que no admite la propiedad de caracteres Unicode (como\p{L}
). pypi.python.org/pypi/regex lo hace.re.UNICODE
bandera es inútil aquí, ya que sólo afecta a las clases de caracteres de la taquigrafía\w
,\d
,\s
.