我正在使用一组unicode字符串并使用以下代码(如Remove punctuation from Unicode formatted strings所示):
import regex
def punc(text):
return regex.sub(ur"\p{P}+", " ", text)
我想更进一步,尝试选择性地保留某些标点符号。例如,无需从unicode字符串中删除-
。最好的方法是什么?提前致谢! :)
答案 0 :(得分:3)
您可以使用\p{P}
否定\P{P}
然后将其放入否定字符类([^…]
)以及您要保留的任何字符,如下所示:
return regex.sub(ur"[^\P{P}-]+", " ", text)
这将匹配\p{P}
中的一个或多个字符,但在字符类中定义的字符除外。
请记住-
是角色类中的特殊字符。如果它没有出现在角色类的开头或结尾,你可能需要逃避它。
另一种解决方案是使用否定前瞻((?!…)
)或否定后瞻((?<!…)
)
return regex.sub(ur"((?!-)\p{P})+", " ", text)
return regex.sub(ur"(\p{P}(?<!-))+", " ", text)
但对于这样的事情,我建议使用角色类。
答案 1 :(得分:1)
您可以使用character class:
def punc(text):
return regex.sub(ur"[^\P{P}-]+", " ", text)
诀窍是否定字符类([^a]
匹配除 a
之外的任何)并使用否定的Unicode属性:
\p{P}
替换为[^\P{P}]
- 两者的行为完全相同。[^\P{P}-]
匹配除-
之外的任何标点字符。