validar regulares python3 online expresiones ejemplos cadenas python regex unicode non-ascii-characters character-properties

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.