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

在Python re中仅匹配一个Unicode字母

束俊材
2023-03-14
问题内容

我有一个要从中提取3组的字符串:

'19 janvier 2012' -> '19', 'janvier', '2012'

月名称可能包含非ASCII字符,因此[A-Za-z]对我不起作用:

>>> import re
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 janvier 2012', re.UNICODE).groups()
(u'20', u'janvier', u'2012')
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 février 2012', re.UNICODE).groups()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'
>>>

我可以使用,\w但它匹配数字和下划线:

>>> re.search(ur'(\w+)', u'février', re.UNICODE).groups()
(u'f\xe9vrier',)
>>> re.search(ur'(\w+)', u'fé_q23vrier', re.UNICODE).groups()
(u'f\xe9_q23vrier',)
>>>

我尝试使用[:alpha:],但是不起作用:

>>> re.search(ur'[:alpha:]+', u'février', re.UNICODE).groups()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'
>>>

如果我能以某种方式匹配\w而没有[_0-9],但我不知道如何。即使我知道如何做到这一点,是否也有像[:alpha:]Python中那样可用的现成快捷方式?


问题答案:

您可以构造一个新的角色类:

[^\W\d_]

代替\w。翻译成英文,意思是“任何不是非字母数字字符([^\W]与相同\w),但也不是数字,也不是下划线的字符”。

因此,它将仅允许Unicode字母(如果使用re.UNICODEcompile选项)。



 类似资料:
  • 问题内容: 我有以下仅允许字母的正则表达式: 如何使用p {L}(通用-任何语言,例如德语,英语等)来执行此操作 我试过了 但所有字母a =“ aB”均返回null 问题答案: 从ECMAScript2018开始,JavaScript终于原生支持Unicode属性转义。 对于较旧的版本,您要么需要自己定义所有相关的Unicode范围。或者,您可以将StevenLevithan的程序包与Unicod

  • 问题内容: 我正在尝试为PHP中的名称编写一个合理的验证器,而我的第一次尝试包括以下模式: 最终将其传递给的呼叫。据我所知,这可以与您的原始ASCII字母一起使用,但似乎在诸如Ă或张之类的易变字符上起作用。 模式本身有问题吗?也许我期望做的工作比我想象的还要多? 还是与输入的传递方式有关?我不确定是否相关,但是我确实确保在表单页面上指定UTF8编码。 问题答案: 我认为问题要比这简单得多:您忘记了

  • 问题内容: 在.net中,您可以使用它来匹配任何字母,如何在Python中进行匹配?即,我想匹配任何大写,小写和带重音的字母。 问题答案: Python的模块尚不支持Unicode属性。但是您可以使用该标志编译正则表达式,然后字符类速记也将与Unicode字母匹配。 由于还将匹配数字,因此您需要从字符类中减去数字以及下划线: 将匹配任何Unicode字母。

  • 问题内容: 我已经阅读了Stackoverflow上的其他问题,但还没有结束。抱歉,如果已经可以回答,但是我没有任何建议在那里工作。 一切都很好,然后我尝试使用其中包含挪威字符的内容(或更像unicode的内容): 如何匹配øæå等典型的unicode字符?我希望能够同时在上述标记组和文件名标记组中匹配这些字符。 问题答案: 您需要指定标志, 并 使用前缀将您的字符串输入为Unicode字符串:

  • 所以我应该得到,但不是。两者都匹配的regex是:。是否可以不允许只使用大写字母而仍然提取第一个匹配?

  • 我正在尝试编写一个模式,该模式将只匹配按字面解释的字符串的第一个字符(可以是任何字符,也可以是空白)。 给定这个函数,它使用“非常没有魔力”来匹配作为参数给出的字符串,然后高亮显示该字符串,我如何修改它,使它只高亮显示第一个字符? 例如,在下面的文本中调用,只会在后面跟着,而不是在任何其他地方突出显示。目前,它突出显示整个给定字符串。 Lorem ipsum do{^(lor sit amet,