我有一个字符串,想要从中提取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]
,但我不知道该如何实现。即使我找到了方法,是否有像Python中的[:alpha:]
这样的快捷方式?
[:alpha:]
,它只能在字符类内部使用,因此正确的正则表达式应该是[[:alpha:]]+
,但Python无法支持这些。 - Tim Pietzcker\w
已经匹配Unicode字符,参见“Unicode(str)模式”: 匹配Unicode单词字符;这包括任何语言中可以作为单词的大多数字符,以及数字和下划线。如果使用了ASCII标志,则只匹配[a-zA-Z0-9_]。 参考https://docs.python.org/3/library/re.html,尽管我不知道是否需要使用re.UNICODE
标志。 - Charlie Parkerre.UNICODE
标志吗?文档似乎暗示它已经适用于Unicode:要搜索的模式和字符串都可以是Unicode字符串(str)以及8位字符串(bytes)。
如果我错了,请纠正我。参考:https://docs.python.org/3/library/re.html - Charlie Parker