python3 - Coincidencia de caracteres Unicode en expresiones regulares de Python
python string expresiones regulares (3)
He leído a través de las otras preguntas en Stackoverflow, pero aún no estoy más cerca. Lo siento, si esto ya está respondido, pero no conseguí nada propuesto para trabajar allí.
>>> import re
>>> m = re.match(r''^/by_tag/(?P<tag>/w+)/(?P<filename>(/w|[.,!#%{}()@])+)$'', ''/by_tag/xmas/xmas1.jpg'')
>>> print m.groupdict()
{''tag'': ''xmas'', ''filename'': ''xmas1.jpg''}
Todo está bien, entonces pruebo algo con caracteres noruegos (o algo parecido a unicode):
>>> m = re.match(r''^/by_tag/(?P<tag>/w+)/(?P<filename>(/w|[.,!#%{}()@])+)$'', ''/by_tag/påske/øyfjell.jpg'')
>>> print m.groupdict()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: ''NoneType'' object has no attribute ''groupdict''
¿Cómo puedo unir los típicos caracteres Unicode, como øæå? Me gustaría poder hacer coincidir esos caracteres también, tanto en el grupo de etiquetas anterior como en el nombre del archivo.
En Python 2, necesita el indicador UNICODE y el constructor de cadenas unicode
>>> re.sub(r"[/w]+","___",unicode(",./hello-=+","utf-8"),flags=re.UNICODE)
u'',./___-=+''
>>> re.sub(r"[/w]+","___",unicode(",./cześć-=+","utf-8"),flags=re.UNICODE)
u'',./___-=+''
>>> re.sub(r"[/w]+","___",unicode(",./привет-=+","utf-8"),flags=re.UNICODE)
u'',./___-=+''
>>> re.sub(r"[/w]+","___",unicode(",./你好-=+","utf-8"),flags=re.UNICODE)
u'',./___-=+''
>>> re.sub(r"[/w]+","___",unicode(",./你好,世界-=+","utf-8"),flags=re.UNICODE)
u'',./___/uff0c___-=+''
>>> print re.sub(r"[/w]+","___",unicode(",./你好,世界-=+","utf-8"),flags=re.UNICODE)
,./___,___-=+
(En este último caso, la coma es una coma china).
Necesita la bandera UNICODE :
m = re.match(r''^/by_tag/(?P<tag>/w+)/(?P<filename>(/w|[.,!#%{}()@])+)$'', ''/by_tag/påske/øyfjell.jpg'', re.UNICODE)
re.UNICODE
especificar el indicador re.UNICODE
e ingrese su cadena como una cadena Unicode usando el prefijo u
:
>>> re.match(r''^/by_tag/(?P<tag>/w+)/(?P<filename>(/w|[.,!#%{}()@])+)$'', u''/by_tag/påske/øyfjell.jpg'', re.UNICODE).groupdict()
{''tag'': u''p/xe5ske'', ''filename'': u''/xf8yfjell.jpg''}
Esto está en Python 2; en Python 3 debe omitir el u
porque todas las cadenas son Unicode.