Estoy intentando utilizar el módulo re
en Python 2.7.3 con texto Devnagari codificado en Unicode. He agregado from __future__ import unicode_literals
a la parte superior de mi código para que todos los literales de cadenas sean objetos unicode.Python Unicode coincidencia de expresión regular que falla con algunos caracteres Unicode -bug o error?
Sin embargo, me encuentro con algunos problemas extraños con la correspondencia de expresiones regulares de Python. Por ejemplo, considere este nombre: "किशोरी". Este es un nombre (mal escrito), en hindi, ingresado por uno de mis usuarios. Cualquier lector Hindi reconocería esto como una palabra.
El siguiente devuelve un partido, como debe ser:
re.search("^[\w\s][\w\s]*","किशोरी",re.UNICODE)
pero esto no significa:
re.search("^[\w\s][\w\s]*$","किशोरी",re.UNICODE)
Algunos espeleología reveló que sólo un personaje en esta cadena, carácter 0915 (क), se reconoce como perteneciente a la clase de caracteres \ w. Esto es incorrecto, ya que la base de datos de caracteres Unicode file on "derived core properties" enumera otros caracteres (no he marcado todos) en esta cadena como alfabéticos, como de hecho lo son.
¿Es esto solo un error en la implementación de Python? Podría evitar esto definiendo manualmente todos los caracteres alfanuméricos de Devnagari como un rango de caracteres, pero sería doloroso. ¿O estoy haciendo algo mal?
Sí, puede confirmar que el módulo regex funciona. La clase de caracteres [[: alnum:]] POSIX también funciona con el módulo regex. – ShankarG
@ShankarG: 'perl' acepta:' echo किशोरी | perl -CS -ne'print si/^ \ w + $/''(asume utf-8 io). – jfs
Cambié mi marca "aceptada" a esta respuesta, ya que esta es la respuesta correcta, de hecho es un error en el módulo re. – ShankarG