Mam ciąg, z którego chcę wyodrębnić 3 grupy:Matching tylko list Unicode w Pythonie ponownie
'19 janvier 2012' -> '19', 'janvier', '2012'
nazwa miesiąca mógłby zawierają znaki spoza ASCII, więc [A-Za-z]
nie działa dla mnie:
>>> 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'
>>>
mogę użyć \w
ale pasuje cyfry i podkreślenia:
>>> 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',)
>>>
Próbowałem użyć [:alpha:], ale to nie działa:
>>> 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'
>>>
Gdybym mógł jakoś dopasować \w
bez [_0-9]
, ale nie wiem jak. A nawet jeśli dowiem się, jak to zrobić, czy jest gotowy skrót, taki jak [:alpha:]
, który działa w języku Python?
Jeśli chodzi o '[: alfa:]', działa to tylko wewnątrz klasy znaków, więc poprawnym wyrażeń regularnych będzie '[[: alpha:]] +', ale Python i tak ich nie obsługuje. –
Dlaczego nie po prostu wywołać .split() w ciągu znaków? – yak