entfernen unicode-emoji mit re in python
Ich versucht zu entfernen, die emoji aus einer unicode-tweet-text und drucken Sie das Ergebnis in python 2.7 mit
myre = re.compile(u'[\u1F300-\u1F5FF\u1F600-\u1F64F\u1F680-\u1F6FF\u2600-\u26FF\u2700-\u27BF]+',re.UNICODE)
print myre.sub('', text)
aber es scheint, fast alle Figuren sind im text entfernt. Ich habe mehrere Antworten von anderen Beiträgen, leider keiner von Ihnen arbeiten hier. Habe ich etwas falsch im re.compile()?
hier ist ein Beispiel für die Ausgabe, die alle Zeichen wurden entfernt:
“ ' //./” ! # # # …
Ist dieser Python 2? Python lässt sich aufbauen, mit breiten oder schmalen Unicode-Unterstützung; vermutlich haben Sie eine UCS-2-build anstatt UCS-4, und das wirkt sich auf was Sie tun können, mit regulären Ausdrücken.
Und bitte geben Sie uns eine Eingabe Probe zu.
Ich war in der Lage zu reproduzieren Sie Ihr Problem, und ich sah auch, dass ein UCS-2-build wirft eine Ausnahme, wenn Sie versuchen, kompilieren Sie den Ausdruck sowieso, das ist also nicht das Problem hier.
Und bitte geben Sie uns eine Eingabe Probe zu.
Ich war in der Lage zu reproduzieren Sie Ihr Problem, und ich sah auch, dass ein UCS-2-build wirft eine Ausnahme, wenn Sie versuchen, kompilieren Sie den Ausdruck sowieso, das ist also nicht das Problem hier.
u'\u1f300'
sollte u'\U0001f300'
. Die erste ist '\u1f30'
und '0'
.InformationsquelleAutor Young | 2014-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie verwenden nicht das korrekte notation für non-BMP unicode-Punkte, die Sie verwenden möchten
\U0001FFFF
eine HauptstadtU
- und 8-stellig:Dies kann reduziert werden zu:
als Ihre ersten beiden Bereiche benachbart sind.
Ihre version war die Angabe (mit zusätzlichen Leerzeichen für die Lesbarkeit):
Das ist, weil die
\uxxxx
escape-Sequenz, die findet immer nur die 4 hex-Ziffern, nicht 5.Der größte dieser Bereiche ist
0-\u1F6F
(so aus der Ziffer0
durchὯ
) umfasst eine sehr großen Schneise der Unicode-standard.Den korrigierten Ausdruck funktioniert, vorausgesetzt, Sie verwenden eine UCS-4 große Python-executable:
UCS-2 äquivalent ist:
Können Sie kombinieren die zwei in Ihr Skript mit einer exception-handler:
sre_constants.error: bad character range
auf Python 2 schmal bauen.ja, Sie können Sie nur verwenden, auf einen breiten bauen, finden Sie unter Python, konvertiert 4-byte-char zu vermeiden MySQL-Fehlermeldung "Fehlerhafte Zeichenfolge-Wert:" für einen Ansatz (Sie müssen übereinstimmen, die UTF-16-Ersatzzeichen Paaren statt).
Hinzugefügt eine UCS-2-version.
Dies ist der Grund, warum ich die Verwendung von Python 3.3+ 🙂
die BMP verwendet codepoints bis zu 0xFFFF. Das sind vier Ziffern. Alles was außerhalb der BMP verwendet more als vier hex-Ziffern, so können Sie die
\uhhhh
4-stellige syntax für diejenigen, die Sie verwenden müssen, um die\Uhhhhhhhh
8-stellige syntax statt.InformationsquelleAutor Martijn Pieters