supprimer unicode emoji à l'aide de re en python
J'ai essayé d'enlever l'emoji à partir d'une unicode tweet de texte et d'imprimer le résultat en python 2.7 utilisation
myre = re.compile(u'[\u1F300-\u1F5FF\u1F600-\u1F64F\u1F680-\u1F6FF\u2600-\u26FF\u2700-\u27BF]+',re.UNICODE)
print myre.sub('', text)
mais il semble que presque tous les personnages sont retirés du texte. J'ai vérifié plusieurs réponses d'autres postes, malheureusement, aucun d'entre eux travaille ici. Ai-je fais quelque chose de mal dans la ré.compiler()?
voici un exemple de sortie que tous les personnages ont été supprimés:
“ ' //./” ! # # # …
- Est-ce Python 2? Python peut être construire large ou étroit support de l'Unicode; vous avez probablement un UCS-2 construire, plutôt que de l'UCS-4, et qui affecte ce que vous pouvez faire avec des expressions régulières.
- Et s'il vous plaît donnez-nous un échantillon d'entrée trop.
- J'ai été en mesure de reproduire votre problème, et j'ai aussi vu qu'un UCS-2 construire déclenche une exception lorsque vous essayez de compiler l'expression de toute façon, donc ce n'est pas la question ici.
u'\u1f300'
devrait êtreu'\U0001f300'
. La première est'\u1f30'
et'0'
.
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas en utilisant la bonne notation pour les non-BMP unicode points; vous souhaitez utiliser
\U0001FFFF
, un capitalU
et 8 chiffres:Cela peut être réduite à:
que vos deux premières plages sont à côté.
Votre version était la spécification (avec ajout d'espaces pour des raisons de lisibilité):
C'est parce que la
\uxxxx
séquence d'échappement prend toujours seulement 4 chiffres hexadécimaux, pas 5.Le plus grand de ces plages est
0-\u1F6F
(donc, à partir des chiffres0
grâce àὯ
), qui couvre une très large bande de la norme Unicode.De la correction de l'expression œuvres, à condition que vous utilisez un UCS-4 Python exécutable:
L'UCS-2 équivalent est:
Vous pouvez combiner les deux dans votre script avec un gestionnaire d'exception:
sre_constants.error: bad character range
sur Python 2 étroites construire.u'...'
) dans une rangée, qui Python fusionne en une chaîne de caractères pour vous.\uhhhh
à 4 chiffres de la syntaxe pour ceux-ci, vous devez utiliser le\Uhhhhhhhh
8 chiffres au lieu de la syntaxe.lambda txt : myre.sub("", unicode(txt, "utf-8"))
et cela a fonctionné sans aucun problème. Merci.