当前位置: 首页 > 面试题库 >

在python正则表达式中匹配unicode字符

夹谷星河
2023-03-14
问题内容

我已经阅读了Stackoverflow上的其他问题,但还没有结束。抱歉,如果已经可以回答,但是我没有任何建议在那里工作。

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

一切都很好,然后我尝试使用其中包含挪威字符的内容(或更像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'

如何匹配øæå等典型的unicode字符?我希望能够同时在上述标记组和文件名标记组中匹配这些字符。


问题答案:

您需要指定re.UNICODE标志, 使用u前缀将您的字符串输入为Unicode字符串

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

这在Python 2中;在Python 3中,您必须省略,u因为所有字符串都是Unicode。



 类似资料:
  • 问题内容: 我正在尝试制作一个Java正则表达式,以使用Pattern.split()将常规格式“ foo-bar”的字符串拆分为“ foo”和“ bar”。“-”字符可以是几个破折号之一:ASCII’-‘,em-破折号,en-破折号等。我构造了以下正则表达式: 如果我正确阅读了Pattern文档,则当在两边都被空格包围时,应该捕获任何Unicode破折号或ASCII破折号。我使用的模式如下: 不

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我有类似的东西 商店 结束行像1商店..我想匹配,它使用python正则表达式。 我尝试了类似的方法, 但是没有用。 编辑:添加代码,我试过 请帮助。 谢谢吉乔 问题答案: 或多或少直接回复您的评论 尝试这个 解决方案是使用,而不是使用后者,因为后者试图将整个字符串与regexp匹配,而前者只是试图在字符串内部查找与表达式匹配的子字符串。

  • 本文向大家介绍Python正则表达式匹配字符串中的数字,包括了Python正则表达式匹配字符串中的数字的使用技巧和注意事项,需要的朋友参考一下 1.使用“\d+”匹配全数字 代码: 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: 结果: ['479', '501', '870', '209', '213',

  • 我们得到了一些这样的内容:

  • 问题内容: 在StackOverflow上有很多问题和答案,假设可以在regexp中使用来匹配“字母” 。但是,使用Unicode时,会有更多的字符被大多数人视为字母(所有希腊字母,Cyrllic ..等等)。Unicode定义了许多块,每个块可能都有“字母”。 Java定义 为诸如字母字符之类的东西定义了Posix类,但是被指定为仅与US- ASCII一起使用。预定义的字符类将单词定义为,其中还