python - 从 unicode 字符串中删除选定的标点符号

标签 python regex python-2.7 unicode punctuation

我正在使用一组 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/

相关文章:

python - 为什么 BeautifulSoup 会抛出这个 HTMLParseError?

python - "OSError: [Errno 2] No such file or directory"使用带有命令和参数的 python 子进程

java - 正则表达式提取内容类型

regex - 打印行中的第一个数字,后跟制表符和没有数字的行

php - 替换 ereg_replace()

python - 简单的 python 2.7 代码有某种问题 : "' list' object has no attribute 'find' "

python - PIP 命令在虚拟环境中不起作用

Python:根据条件查找数据框中每个事件所花费的时间

python - 字符串编码/解码问题 - 末尾缺少字符

python - 从子类中的父类访问属性