我正在使用一组 unicode 字符串并使用以下代码段(如 Remove punctuation from Unicode formatted strings 中所示):
import regex
def punc(text):
return regex.sub(ur"\p{P}+", " ", text)
我想更进一步,尝试有选择地保留某些标点符号。例如,不需要从 unicode 字符串中删除 -
。最好的方法是什么?提前致谢! :)
最佳答案
您可以否定 \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)
但是对于这样的事情,我建议使用字符类。
关于python - 从 unicode 字符串中删除选定的标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637118/