Ich musste die Chinesen aus einer Reihe von Strings heute strippen und war auf der Suche nach einem einfachen Python Regex. Irgendwelche Vorschläge?Finden Sie alle chinesischen Text in einer Zeichenfolge mit Python und Regex
Antwort
Die kurze, aber relativ umfassende Antwort für enge Unicode von Python baut (mit Ausnahme von ordinals> 65535, die nur in engen Unicode-Versionen über Ersatzpaare dargestellt werden können):
Der Code zum Erstellen der RE, und wenn Sie chinesische Zeichen in der supplementary plane für Wide Builds erkennen müssen:
# -*- coding: utf-8 -*-
import re
LHan = [[0x2E80, 0x2E99], # Han # So [26] CJK RADICAL REPEAT, CJK RADICAL RAP
[0x2E9B, 0x2EF3], # Han # So [89] CJK RADICAL CHOKE, CJK RADICAL C-SIMPLIFIED TURTLE
[0x2F00, 0x2FD5], # Han # So [214] KANGXI RADICAL ONE, KANGXI RADICAL FLUTE
0x3005, # Han # Lm IDEOGRAPHIC ITERATION MARK
0x3007, # Han # Nl IDEOGRAPHIC NUMBER ZERO
[0x3021, 0x3029], # Han # Nl [9] HANGZHOU NUMERAL ONE, HANGZHOU NUMERAL NINE
[0x3038, 0x303A], # Han # Nl [3] HANGZHOU NUMERAL TEN, HANGZHOU NUMERAL THIRTY
0x303B, # Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
[0x3400, 0x4DB5], # Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400, CJK UNIFIED IDEOGRAPH-4DB5
[0x4E00, 0x9FC3], # Han # Lo [20932] CJK UNIFIED IDEOGRAPH-4E00, CJK UNIFIED IDEOGRAPH-9FC3
[0xF900, 0xFA2D], # Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900, CJK COMPATIBILITY IDEOGRAPH-FA2D
[0xFA30, 0xFA6A], # Han # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30, CJK COMPATIBILITY IDEOGRAPH-FA6A
[0xFA70, 0xFAD9], # Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70, CJK COMPATIBILITY IDEOGRAPH-FAD9
[0x20000, 0x2A6D6], # Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000, CJK UNIFIED IDEOGRAPH-2A6D6
[0x2F800, 0x2FA1D]] # Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800, CJK COMPATIBILITY IDEOGRAPH-2FA1D
def build_re():
L = []
for i in LHan:
if isinstance(i, list):
f, t = i
try:
f = unichr(f)
t = unichr(t)
L.append('%s-%s' % (f, t))
except:
pass # A narrow python build, so can't use chars > 65535 without surrogate pairs!
else:
try:
L.append(unichr(i))
except:
pass
RE = '[%s]' % ''.join(L)
print 'RE:', RE.encode('utf-8')
return re.compile(RE, re.UNICODE)
RE = build_re()
print RE.sub('', u'美国').encode('utf-8')
print RE.sub('', u'blah').encode('utf-8')
Das ist im Internet gefunden und es scheint perfekt zu funktionieren.
#!/usr/bin/env python
# -*- encoding: utf8 -*-
import re
sample = u'I am from 美国。We should be friends. 朋友。'
for n in re.findall(ur'[\u4e00-\u9fff]+',sample):
print n
Ausgang:
美国
朋友
Dies funktioniert nicht für alle chinesischen Zeichen, da einige Ersatzpaare sind, wenn sie UTF-16-kodiert sind. (Da Sie \ u4e00 und \ u9fff verwenden, sieht es so aus, als wären Sie UTF-16) –
@Stephen: Das stimmt, aber die chinesischen Schriftzeichen außerhalb der BMP sind weitgehend Varianten/historische Formen, die in der modernen chinesischen Schrift nicht verwendet werden Es ist unwahrscheinlich, dass es eine Rolle spielt. Andere mögliche Probleme, die Prairiedogg wahrscheinlich nicht interessiert: Wie Sie im obigen Beispiel sehen können, extrahiert der Code Han-Zeichen, ignoriert jedoch chinesische Interpunktion; Es ignoriert auch verschiedene andere chinesische Symbole (eingekreiste Zeichen usw.). und es wird seltsame und schreckliche Dinge zu japanischem Text tun. – Porculus
Während ich meinen Datensatz durcharbeite, denke ich, dass TokenMacGuy korrekt ist - ich möchte wirklich alles entfernen, was nicht lateinisch ist. – Prairiedogg
- 1. Finden Sie alle Instanzen von "{XE Text Text}" mit RegEx
- 2. Wie alle Spiele eines Musters in einer Zeichenfolge finden regex
- 3. Wie kann ich alle Platzhalter für str.format in einer Python-Zeichenfolge mit einem Regex finden?
- 4. Sublime Text REGEX finden und
- 5. Python Regex - Unterschied zwischen Suche und finden alle
- 6. Python Regex, wie alle Übereinstimmungen aus einer Zeichenfolge zu löschen
- 7. So finden Sie alle Registerteile in einer Datei mit Regex
- 8. Finden Sie alle Vorkommen von Ganzzahl in Text in Python
- 9. Python-Extrakt Auftreten einer Zeichenfolge mit Regex
- 10. Finden Sie Hyperlinks in Text mit Python (twitter verwandt)
- 11. PHP Finden Sie alle Vorkommen einer Teilzeichenfolge in einer Zeichenfolge
- 12. Wie finden Sie @Benutzername in einer Zeichenfolge?
- 13. Regex mit einer Zeichenfolge oder nicht mit einer Zeichenfolge regex?
- 14. Abschneiden chinesischen Text
- 15. Python 2.7: Test, ob Zeichen in einer Zeichenfolge alle chinesischen Zeichen sind
- 16. Finden Sie alle URLs in einer Zeichenfolge in Rails 3
- 17. Regex zum Finden einer nicht abgeschlossenen Zeichenfolge
- 18. Finden und Zeichenfolge innerhalb einer bestimmten Zeichenfolge mit Regex in Visual Studio ersetzen
- 19. Finden bestimmte Zeichenfolge innerhalb URL mit Regex
- 20. Ersetzen Sie alle "(" und ")" in einer Zeichenfolge in Java
- 21. Python Regex finden Wechselverhalten
- 22. Finden Sie heraus, wie oft eine Regex in einer Zeichenfolge in Python übereinstimmt
- 23. Python: Finden Teilzeichenfolge mit Regex in Dateien
- 24. Finden Sie alle Vorkommen von Teilzeichenfolge in Zeichenfolge in Java
- 25. Wie finden Sie das erste Zeichen einer Zeichenfolge und ersetzen alle Ergebnisse davon in der gleichen Zeichenfolge in Python?
- 26. Finden Sie alle Dokumente mit * in MongoDB
- 27. Python Regex finden Bildquelle
- 28. Wie erhalten Sie alle Übereinstimmungen in Python mit RegEx, wenn das Muster ähnlichen Text enthält?
- 29. So extrahieren Sie Text Smileys aus einer Zeichenfolge in Android
- 30. Python: Text einer Regex-Übereinstimmung erhalten
Sind Sie sicher, dass Sie Chinesisch entfernen möchten, oder möchten Sie wirklich alles entfernen, das nicht Latein ist? – SingleNegationElimination
Warum ist es notwendig (oder nützlich), chinesische Zeichen aus einer Zeichenfolge zu entfernen, anstatt sie zu übersetzen? –