Tengo una cuerda UTF8 con combinación de signos diacríticos. Quiero que coincida con la secuencia de expresiones regulares \w
. Coincide con los caracteres que tienen acentos, pero no si se trata de un personaje latino que combina signos diacríticos.Python regex w no coincide con la combinación de diacríticos?
>>> re.match("a\w\w\wz", u"aoooz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> print u"ao\u00F3oz"
aoóoz
>>> re.match("a\w\w\wz", u"ao\u00F3oz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> re.match("a\w\w\wz", u"aoo\u0301oz", re.UNICODE)
>>> print u"aoo\u0301oz"
aóooz
(se parece a la Procesadora SO rebaja está teniendo problemas con los signos diacríticos que combinan en lo anterior, pero hay una en la última línea)
¿Hay alguna forma para que coincida con la combinación de diacríticos \w
? No quiero normalizar el texto porque este texto proviene de un nombre de archivo, y no quiero tener que hacer un 'nombre completo de archivo de normalización Unicode' todavía. Esto es Python 2.5.
Sí, eso me dirá si tengo una coincidencia, pero después de hacer la coincidencia, saco grupos coincidentes y luego hago cosas con ellos. Si utilicé su enfoque, entonces los bytes que tengo después no serían los mismos bytes que están en el nombre de archivo – Rory
que veo. ¿Sabes si las cadenas son consistentes en el uso de la combinación de signos diacríticos (siempre combinando, o al menos siempre combinando o no dentro de una sola cadena)? De ser así, podría normalizar los resultados a NFC o NFD nuevamente según sea necesario. De lo contrario, creo que tendrás que recurrir a trucos para detectar la posición de combinar signos diacríticos en la cadena original e intentar usar esa información para descomponer solo los caracteres necesarios (lo que sería más trabajo que descomponer todo o De ningún modo). – Steven
O tal vez simplemente cambie la expresión y use los rangos para los signos diacríticos de combinación que le interesan, y use algo como \ w [\ u0300- \ u036F]? en lugar de simplemente \ w – Steven