2016-12-08 4 views
0

Ich versuche, Hangul, Englisch, Nummer von String-Eingang zu extrahieren.python re nicht handling hangul

hangul = re.compile('[^a-zA-Z0-9\u3131-\u3163\uac00-\ud7a3]+') 
s = u'abcd 가나다라 1234' 
print hangul.sub('', s) 

diese mir geben u'abcd1234'

warum es \ uac00- \ ud7a3 nicht ignorieren?

Antwort

0

Verwenden Sie eine Unicode-Zeichenfolge in re.compile; Andernfalls wird \u3163 nicht als Unicode-Escape behandelt.

Obwohl nicht erforderlich, sollte '' im .sub auch Unicode sein. Es gibt eine implizite Konvertierung in Unicode in Python 2, und Python 3 benötigt dies.

#coding:utf8 
import re 
hangul = re.compile(u'[^a-zA-Z0-9\u3131-\u3163\uac00-\ud7a3]+') 
s = u'abcd 가나다라 1234' 
print hangul.sub(u'', s) 

Ausgang:

abcd가나다라1234 
+0

Danke! Es klappt!! – nolsigan

0

Ich bin der Entwickler für Python jamo. Wenn Sie Python 3, verwenden, können Sie Funktionen wie jamo.is_hangul_char verwenden. Andernfalls könnten Sie die source code verwenden, um Ihnen zu helfen (Sie fehlen ein paar koreanische Zeichen in Ihrer Regex).

Wenn Sie einige der älteren Hangul Jamo Display-Zeichen nicht verpassen wollen, dann sollten Sie 3131-\u3163\u3165-\u318E verwenden, um alle Hangul-Kompatibilitäts-Jamo zu vergleichen. Wenn Sie nur an modernen Display-Zeichen interessiert sind, dann würden Sie \u3131-\u314E\u314F-\u3163 verwenden, um alle modernen Hangul-Kompatibilitäts-Jamo zu vergleichen.