J'ai une liste des noms simples comme Márquez
,Regex - caractères alpha spéciaux? - Python
en raison de la á
(?<name>[a-zA-Z]+)
ne semble pas fonctionner!
Une aide serait grandement appréciée!
J'ai une liste des noms simples comme Márquez
,Regex - caractères alpha spéciaux? - Python
en raison de la á
(?<name>[a-zA-Z]+)
ne semble pas fonctionner!
Une aide serait grandement appréciée!
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]+)
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.
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). –
@Jacek: pourquoi votre chaîne non-ASCII n'est pas unicode? – SilentGhost
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. –