1

考虑在 Python 3 中使用正则表达式的这个片段:

>>> t = "Meu cão é #paraplégico$."
>>> re.sub("[^A-Za-z0-9 ]","",t,flags=re.UNICODE)
'Meu co  paraplgico'

为什么它会删除非 ASCII 字符?我试过没有旗帜,一切都一样。

作为奖励,任何人都可以在 Python 2.7 上进行这项工作吗?

4

3 回答 3

5

[^A-Za-z0-9 ]您正在用空白 ( )替换非字母数字字符 ( "")。非 ASCII 字符不在 AZ、az 或 0-9 之间,因此它们被替换。

您可以像这样匹配所有单词字符:

>>> t = "Meu cão é #paraplégico$."
>>> re.sub("[^\w ]","",t, flags=re.UNICODE)
>>> 'Meu cão é paraplégico'

或者您可以像这样将字符添加到您的正则表达式中[^A-Za-z0-9ãé ]

于 2013-03-05T12:12:40.983 回答
3
[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 cãoé paraplégico

于 2013-03-05T12:52:24.280 回答
0

我通过切换到正则表达式库(来自 PyPI)解决了这个问题。

然后正则表达式命令变为:

regex.sub(ur"[^\p{L}\p{N} ]+", u"", t)
于 2013-03-05T12:56:45.773 回答