【问题标题】:Remove selected punctuation from unicode strings从 unicode 字符串中删除选定的标点符号
【发布时间】:2014-08-29 12:01:50
【问题描述】:

我正在使用一组 unicode 字符串并使用以下代码(如 Remove punctuation from Unicode formatted strings 所示):

import regex

def punc(text):
    return regex.sub(ur"\p{P}+", " ", text)

我想更进一步,尝试有选择地保留某些标点符号。例如 - 不需要从 unicode 字符串中删除。最好的方法是什么?提前致谢! :)

【问题讨论】:

    标签: python regex python-2.7 unicode punctuation


    【解决方案1】:

    您可以将\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)
    

    但对于这样的事情,我会推荐字符类。

    【讨论】:

      【解决方案2】:

      您可以为此使用character class

      def punc(text):
          return regex.sub(ur"[^\P{P}-]+", " ", text)
      

      诀窍是否定字符类([^a] 匹配任何除了 a)并使用否定的 Unicode 属性:

      • 我们将 \p{P} 替换为 [^\P{P}] - 两者的行为完全相同。
      • 现在我们可以将字符添加到应该匹配的类:[^\P{P}-] 匹配除- 之外的任何标点字符。

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 2016-02-20
        相关资源
        最近更新 更多