caracteres Unicode coincidentes en expresiones regulares de Python

He leído a través de las otras preguntas en Stackoverflow, pero todavía no estoy más cerca. Lo siento, si esto ya está respondido, pero no conseguí nada propuesto para trabajar.

>>> import re >>> m = re.match(r'^/by_tag/(?P\w+)/(?P(\w|[.,!#%{}()@])+)$', '/by_tag/xmas/xmas1.jpg') >>> print m.groupdict() {'tag': 'xmas', 'filename': 'xmas1.jpg'} 

Todo está bien, luego bash algo con caracteres noruegos (o algo más parecido a Unicode):

 >>> m = re.match(r'^/by_tag/(?P\w+)/(?P(\w|[.,!#%{}()@])+)$', '/by_tag/påske/øyfjell.jpg') >>> print m.groupdict() Traceback (most recent call last): File "", line 1, in  AttributeError: 'NoneType' object has no attribute 'groupdict' 

¿Cómo puedo hacer coincidir los caracteres típicos de Unicode, como øæå? Me gustaría poder hacer coincidir esos caracteres también, tanto en el grupo de tags anterior como en el de nombre de archivo.

re.UNICODE especificar el indicador re.UNICODE e ingresar su cadena como una cadena Unicode usando el prefijo u :

 >>> re.match(r'^/by_tag/(?P\w+)/(?P(\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 debes omitir u porque todas las cadenas son Unicode.

Necesitas la bandera de UNICODE :

 m = re.match(r'^/by_tag/(?P\w+)/(?P(\w|[.,!#%{}()@])+)$', '/by_tag/påske/øyfjell.jpg', re.UNICODE) 

En Python 2, necesita el indicador re.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).