I have a string from which i want to extract 3 groups:
'19 janvier 2012' -> '19', 'janvier', '2012'
Month name could contain non ASCII characters, so [A-Za-z]
does not work for me:
>>> 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'
>>>
I could use \w
but it matches digits and underscore:
>>> 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',)
>>>
I tried to use [:alpha:], but it's not working:
>>> 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'
>>>
If i could somehow match \w
without [_0-9]
, but i don't know how. And even if i find out how to do this, is there a ready shortcut like [:alpha:]
which works in Python?
[:alpha:]
, this only works inside a character class, so the correct regex would be[[:alpha:]]+
, but Python doesn't support these anyway. – Iredale\w
already matches unicode seeFor Unicode (str) patterns: Matches Unicode word characters; this includes most characters that can be part of a word in any language, as well as numbers and the underscore. If the ASCII flag is used, only [a-zA-Z0-9_] is matched.
ref docs.python.org/3/library/re.html though idk if we need there.UNICODE
flag. – Nasalre.UNICODE
flag? The docs seem to imply it already works for unicode:Both patterns and strings to be searched can be Unicode strings (str) as well as 8-bit strings (bytes).
correct me if I am wrong. Ref: docs.python.org/3/library/re.html – Nasal