Tôi có một chuỗi từ mà tôi muốn trích xuất 3 nhóm:Matching chỉ thư unicode trong Python lại
'19 janvier 2012' -> '19', 'janvier', '2012'
Tên tháng có thể chứa các ký tự ASCII không, vì vậy [A-Za-z]
không làm việc cho tôi:
>>> 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'
>>>
tôi có thể sử dụng \w
nhưng nó phù hợp với chữ số và nhấn mạnh:
>>> 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',)
>>>
Tôi cố gắng để sử dụng [:alpha:], nhưng nó không làm việc:
>>> 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'
>>>
Nếu tôi bằng cách nào đó có thể phù hợp với \w
mà không [_0-9]
, nhưng tôi không biết làm thế nào. Và ngay cả khi tôi tìm ra cách để làm điều này, có một lối tắt sẵn sàng như [:alpha:]
hoạt động trong Python không?
Đối với '[: alpha:]', điều này chỉ hoạt động bên trong một lớp ký tự, do đó, regex chính xác sẽ là '[[: alpha:]] +', nhưng Python không hỗ trợ chúng. –
Tại sao không chỉ đơn giản gọi .split() trên chuỗi? – yak