Question

Dans le module "chaîne" de la bibliothèque standard,

string.ascii_letters ## Same as string.ascii_lowercase + string.ascii_uppercase

est

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

Y at-il une constante similaire qui comprendrait tout ce qui est considéré comme une lettre unicode?

Était-ce utile?

La solution

Vous pouvez construire votre propre constante de lettres majuscules et minuscules Unicode avec:

import unicodedata as ud
all_unicode = ''.join(unichr(i) for i in xrange(65536))
unicode_letters = ''.join(c for c in all_unicode
                          if ud.category(c)=='Lu' or ud.category(c)=='Ll')

Cela fait une chaîne 2153 caractères (build étroite Unicode Python). Pour le code comme letter in unicode_letters il serait plus rapide d'utiliser un ensemble à la place:

unicode_letters = set(unicode_letters)

Autres conseils

Il n'y a pas la chaîne, mais vous pouvez vérifier si un caractère est une lettre à l'aide du module unicodedata, en particulier sa fonction category().

>>> unicodedata.category(u'a')
'Ll'
>>> unicodedata.category(u'A')
'Lu'
>>> unicodedata.category(u'5')
'Nd'
>>> unicodedata.category(u'ф') # Cyrillic f.
'Ll'
>>> unicodedata.category(u'٢') # Arabic-indic numeral for 2.
'Nd'

Ll signifie "lettre minuscule". Lu signifie « lettre majuscule ». Nd signifie "numérique, chiffres".

Ce serait une constante assez massif. Unicode couvre actuellement plus de 100.000 caractères différents. Donc, la réponse est non.

La question est pourquoi vous besoin? Il pourrait y avoir une autre façon de résoudre quel que soit votre problème avec le module unicodedata, par exemple.

Mise à jour: Vous pouvez télécharger des fichiers avec tous les noms unicode et d'autres informations de points de données de ftp://ftp.unicode.org / , et faire des tas de choses intéressantes avec cela.

Comme mentionné dans les réponses précédentes, la chaîne serait en effet chemin trop longtemps. Donc, vous avez à cibler (a) langue (s) spécifique.
[EDIT: Je compris que ce fut le cas pour mon utilisation prévue d'origine, et pour la plupart des utilisations, je suppose. Toutefois, dans l'intervalle, Mark Tolonen a donné une bonne réponse à la question comme il a été demandé, donc j'ai choisi sa réponse, même si je la solution suivante]

Cela se fait facilement avec le module "locale":

import locale
import string
code = 'fr_FR' ## Do NOT specify encoding (see below)
locale.setlocale(locale.LC_CTYPE, code)
encoding = locale.getlocale()[1]
letters = string.letters.decode(encoding)

avec "lettres" étant une chaîne de caractères unicode 117 long.

Apparemment, string.letters dépend de l'encodage par défaut pour le code de langue choisi, plutôt que sur la langue elle-même. Réglage des paramètres régionaux à ou de_DE ou en_US es_ES mettra à jour string.letters à la même valeur (car ils sont tous codés en ISO8859-1 par défaut).

Si vous ajoutez un encodage au code de langue (de_DE.UTF-8), l'encodage par défaut sera utilisé à la place pour string.letters. Cela entraînerait une UnicodeDecodeError si vous avez utilisé le reste du code ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top