【发布时间】:2016-02-20 14:51:53
【问题描述】:
我正在尝试从 unicode 字符串中删除标点符号,该字符串可能包含非 ascii 字母。我尝试使用regex 模块:
import regex
text = u"<Üäik>"
regex.sub(ur"\p{P}+", "", text)
但是,我注意到字符 < 和 > 不会被删除。有谁知道为什么,还有其他方法可以从 unicode 字符串中去除标点符号吗?
编辑:我尝试过的另一种方法是:
import string
text = text.encode("utf8").translate(None, string.punctuation).decode("utf8")
但我想避免将文本从 unicode 转换为字符串并向后转换。
【问题讨论】:
-
你应该定义什么是标点符号。特别是在 unicode 中,这可能是非常多的字符和字符组合,具体取决于您的语言。
-
使用
unicode.translate()时无需转换为 UTF-8。使用text.translate(dict.fromkeys(ord(c) for c in string.punctuation))。 -
而
\p{P}不包括<为>;这些不属于标点符号。他们是Math Symbol (Sm) chodepoints。 -
@MartijnPieters 感谢您的澄清!
-
@ivanab:
string.punctuation由 Unicode 中的 different standard 确定。两人不同意。
标签: python regex string python-2.7 unicode