Question

J'ai lu les autres questions à Stackoverflow, mais toujours pas plus près. Désolé, si cela est toujours répondu, mais je n'ai rien proposé de travailler là-bas.

>>> 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'}

Tout va bien, alors j'essaie quelque chose avec des personnages norvégiens (ou quelque chose de plus 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'

Comment puis-je correspondre aux caractères Unicode typiques, comme Øæå? J'aimerais également correspondre à ces personnages, à la fois dans le groupe de balises ci-dessus et celui du nom de fichier.

Était-ce utile?

La solution

Vous devez spécifier le re.UNICODE drapeau, et Entrez votre chaîne en tant que chaîne Unicode en utilisant le u préfixe:

>>> 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'}

Ceci est dans Python 2; Dans Python 3, vous devez laisser de côté le u Parce que toutes les chaînes sont Unicode.

Autres conseils

Vous avez besoin du Unicode drapeau:

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

Dans Python 2, vous avez besoin du re.unicode drapeau et le unicode constructeur de cordes

>>> 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)
,./___,___-=+

(Dans ce dernier cas, la virgule est la virgule chinoise.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top