【问题标题】:RegEx for matching all non-words except punctuation?正则表达式匹配除标点符号以外的所有非单词?
【发布时间】:2016-12-24 08:22:53
【问题描述】:

对于像这样的句子:

sent = "This i$s a s[[]ample sentence.\nAnd another <<one>>.
        \nMoreover, it is 'filtered'!"

我想得到:

"This is a sample sentence. And another one. Moreover, it is filtered."

因此,我认为使用re.sub 应该是要走的路。然而,RegEx 并没有按预期工作(就像它几乎总是这样^^)。

我的想法是使用\W 匹配每个非单词,然后排除[.,;!?] 以保留标点符号。我尝试的最后一个正则表达式是:

re.sub(r"(\W[^\.\,\;\?\!])", "", sent)

不幸的是,[^\.\,\;\?\!] 确实匹配不包含[.,;!?] 条目的任何内容,而不是简单地说“不要按字面意思匹配这些字符”。

如何从匹配中排除这些字符?

【问题讨论】:

    标签: python regex python-3.x replace


    【解决方案1】:

    \W 需要集成到否定字符类中。 \W[^\w] 相同,所以你最终会得到 [^\w.,;!?]。您应该重复此字符类,以在一个步骤中匹配连续出现 - [^\w.,;!?]+

    您似乎也想保留空格,因此您应该将它们添加到您的角色类中。

    深入了解您的问题,您还想用空格替换换行符,用. 替换!。这使它成为一个多步骤的解决方案。首先过滤掉任何不需要的[^\w.,;!? \n]+,在下一步中将\n 替换为,将! 替换为.

    【讨论】:

    • 谢谢!如何否定单个空格? \s 否定许多字符。
    猜你喜欢
    • 2014-12-23
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多