正则表达式为非ASCII字符

时间:2013-03-05 12:08:26

标签: python regex unicode python-3.x

在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上完成这项工作吗?

3 个答案:

答案 0 :(得分:5)

您正在用空白([^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ãé ]

答案 1 :(得分:2)

[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))
  

Meucãoéparaplégico

答案 2 :(得分:0)

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

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

regex.sub(ur"[^\p{L}\p{N} ]+", u"", t)