Python: Vérifier si une chaîne contient des caractères chinois?
Une chaîne de caractères peut-être que ce
ipath= "./data/NCDC/上海/虹桥/9705626661750dat.txt"
ou ce
ipath = './data/NCDC/ciampino/6240476818161dat.txt'
Comment puis-je savoir la première chaîne contient chinois?
Je trouve cette réponse peut-être utile:
Trouver tous les Chinois de texte dans une chaîne de caractères à l'aide de Python et de Regex
mais ça n'a pas fonctionné:
import re
ipath= "./data/NCDC/上海/虹桥/9705626661750dat.txt"
re.findall(ur'[\u4e00-\u9fff]+', ipath) # => []
Êtes-vous à l'aide de Python 2? En Python 3, il semble de travail sans
Jetez un oeil à cette Python 2 demo - faut-il travailler pour vous?
r
lors de la déclaration de la regex.ipath= u"./data/NCD
, manqué u
avant de la chaîne.Jetez un oeil à cette Python 2 demo - faut-il travailler pour vous?
OriginalL'auteur cqcn1991 | 2016-01-04
Vous devez vous connecter pour publier un commentaire.
Correspondant à la chaîne unicode ainsi
u
me donne une erreur de syntaxe, supprimer, ça marche pour moire.findall(r"[\u4e00-\u9fff]+", ipath)
J'obtiens le même problème (et la solution) mentionné par @LYu ci-dessus. S'il vous plaît pouvez-vous expliquer ce que le
u
est nécessaire et pourquoi il en est à l'origine des problèmes qui peuvent être résolus en le supprimant de votre code?OriginalL'auteur xecgr
Si vous voulez simplement savoir si il y a un caractère chinois dans votre chaîne vous n'avez pas besoin
re.findall
, utilisezre.search
et le fait que correspondre à des objets sont truthy.OriginalL'auteur timgeb
Et pour ceux d'entre nous qui ne se soucie pas
re
:Edit: pour la liste complète des caractères Chinois ce DONC, le lien est intéressant de voir que la gamme U+4E00..U+9FFF n'est pas complète.
Quelle est la gamme complète des caractères Chinois en Unicode?
OriginalL'auteur Rolf of Saxony
De sortie:
./data/NCDC/上海/虹桥/9705626661750dat.txt
[u'\u4e0a\u6d77', u'\u8679\u6865']
Vous avez besoin pour décoder l'entrée pour le rendre unicode.
ou
OriginalL'auteur vks
''
est un bytestring sur Python 2. Ajouterfrom __future__ import unicode_literals
en haut du module ou de l'utilisation de l'unicode des littéraux:u''
:OriginalL'auteur jfs
En python 3.6, j'ai utilisé ce
OriginalL'auteur Максим Стукало
Selon cette question, la plage doit être
[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC]
OriginalL'auteur Kevin He
À l'aide de ces codepoint plages, nous pouvons écrire un
is_cjk
fonction:Que nous pouvons ensuite utiliser pour traiter le texte, en utilisant des fonctions comme
filter
,any
,all
, etmap
pour traiter le texte caractère par caractère, ou de composer des fonctions plus complexes:Noter que le CJK plages comprendra non seulement des caractères Chinois, mais peuvent également inclure les coréens et les Japonais caractères. Pour les plus complexes d'utilisation, essayez une bibliothèque dédiée comme
cjklib
.OriginalL'auteur 9999years