Me sorprende que no pueda hacer coincidir una diéresis alemana en una expresión regular. Probé varios enfoques, la mayoría relacionados con el establecimiento de configuraciones regionales, pero hasta ahora no sirvieron para nada.Diéresis en correspondencia con expresiones regulares (¿mediante la configuración regional?)
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
re.findall(r'\w+', 'abc def g\xfci jkl', re.L)
re.findall(r'\w+', 'abc def g\xc3\xbci jkl', re.L)
re.findall(r'\w+', 'abc def güi jkl', re.L)
re.findall(r'\w+', u'abc def güi jkl', re.L)
Ninguna de estas versiones coincide con la diéresis-u (ü) correctamente con \w+
. También eliminar la bandera re.L
o prefijar la cadena del patrón con u
(para hacerlo unicode) no me ayudó.
¿Alguna idea? ¿Cómo se usa correctamente la bandera re.L
?
No, no lo hice (mea culpa), yo no era consciente de la existencia de esa bandera, ¡y resuelve mi problema! Gracias, marcaré esto como la respuesta aceptada pronto (a menos que una respuesta más elaborada también explique por qué mis pruebas con solo usar la bandera de configuración regional no funcionaron como se esperaba. – Alfe
Editado para dar un enlace a un hilo dando alguna explicación. –
Si está usando Python 2, use cadenas Unicode (u "..."). Hacer una secuencia de comandos UTF-8 es una buena idea. Olvídese de la bandera 'LOCALE', piense que es solo para material heredado (cuando no tiene otra opción). – MRAB