考慮使用正則表達式這個片段在Python 3:的規則運算非ASCII字符
>>> t = "Meu cão é #paraplégico$."
>>> re.sub("[^A-Za-z0-9 ]","",t,flags=re.UNICODE)
'Meu co paraplgico'
爲什麼它刪除非ASCII字符?我試過沒有旗幟,都是一樣的。
作爲獎勵,任何人都可以在Python 2.7上做這項工作嗎?
考慮使用正則表達式這個片段在Python 3:的規則運算非ASCII字符
>>> t = "Meu cão é #paraplégico$."
>>> re.sub("[^A-Za-z0-9 ]","",t,flags=re.UNICODE)
'Meu co paraplgico'
爲什麼它刪除非ASCII字符?我試過沒有旗幟,都是一樣的。
作爲獎勵,任何人都可以在Python 2.7上做這項工作嗎?
[In 1]: import regex
[In 2]: t = u"Meu cão é #paraplégico$."
[In 3]: regex.sub(r"[^\p{Alpha} ]","",t,flags=regex.UNICODE)
[In 4]: print(regex.sub(r"[^\p{Alpha} ]","",t,flags=regex.UNICODE))
MEU曹娥paraplégico
您正在用空白(""
)替換非字母數字字符([^A-Za-z0-9 ]
)。非ASCII字符不在A-Z,a-z或0-9之間,因此它們會被替換。
可以匹配所有單詞字符是這樣的:
>>> t = "Meu cão é #paraplégico$."
>>> re.sub("[^\w ]","",t, flags=re.UNICODE)
>>> 'Meu cão é paraplégico'
或者你可以將角色添加到您的正則表達式,像這樣:[^A-Za-z0-9ãé ]
。
我通過切換到regex庫(一封來自PyPI)解決了這個。
那麼正則表達式的命令變成了:
regex.sub(ur"[^\p{L}\p{N} ]+", u"", t)
我使用Python 3.2 – fccoelho 2013-03-05 12:09:11
因爲'A-z'是'ABCDEF ...... xyz'而這並不包括'了'。如果你想要所有的單詞字符,使用'\ w'。 – 2013-03-05 12:53:57