我有一个字符串,我想从中提取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中工作?
答案 0 :(得分:48)
您可以构建一个新的角色类:
[^\W\d_]
而不是\w
。翻译成英文,意思是“任何不是非字母数字字符的字符([^\W]
与\w
相同),但这也不是数字而不是下划线”。
因此,它只允许使用Unicode字母(如果使用re.UNICODE
编译选项)。