2010-03-09 11 views

Répondre

3

vous pouvez utiliser

\w+ 

avec le drapeau unicode. Je suppose qu'il n'y a aucun risque d'avoir des chiffres ou des traits de soulignement dans vos noms.

>>> re.findall('\w+', 'Márquez', re.U) 
['Márquez'] 

Vous semblez aussi manquer P après le point d'interrogation: (?P<name>[a-zA-Z]+)

+0

Cela ne semble pas bon pour Python <3.0 - Je n'aime pas l'idée d'utiliser l'option UNICODE avec des chaînes régulières (non-unicode). –

+0

@Jacek: pourquoi votre chaîne non-ASCII n'est pas unicode? – SilentGhost

+0

Dans Python 2.x, le type str et le littéral "xxxx" contiennent juste une chaîne d'octets. Ces octets peuvent être des caractères dans un codage spécifique, mais sans informations d'encodage, ce ne sont que des octets. 'Márquez' est: (77, 195, 161, 114, 113, 117, 101, 122) (8 octets) si votre encodage est 'utf-8' ou (77, 225, 114, 113, 117, 101, 122) (7 octets) si le codage est ISO 8859-1. Et la même valeur serait "Mαrquez" lorsqu'il est décodé dans l'ISO 8859-7. Les mêmes octets, différents caractères. Sans connaître l'encodage, nous ne pouvons pas parler de caractères Unicode. –

0

Pour Python < 3 vous pouvez activer locale:

import locale 
locale.setlocale(locale.LC_ALL, '') 

Et puis utilisez l'option re.LOCALE avec vos regexpes :

re.findall('\w+', 'Márquez', re.LOCALE) 

Cependant, Unicode est probablement la meilleure solution, même si cela nécessite de décoder les données et de les encoder dans votre encodage local.