对于这样的句子:
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)
不幸的是,[^\.\,\;\?\!]
确实匹配任何不包含 [.,;!?]
条目的内容,而不是简单地说“不要按字面意思匹配这些字符”。
如何从匹配中排除这些字符?
最佳答案
\W
需要集成到否定字符类中。 \W
与 [^\w]
相同,因此最终会得到 [^\w.,;!?]
。您应该重复此字符类,以便在一个步骤中匹配连续出现的情况 - [^\w.,;!?]+
。
看来您还想保留空格,因此您应该将它们添加到您的字符类中。
深入研究您的问题,您还希望将换行符替换为空格,将 !
替换为 .
。这使其成为一个多步骤解决方案。首先过滤掉任何不需要的 [^\w.,;!?\n]+
,在下一步中将 \n
替换为 ,将
!
替换为 .
。
关于python - 用于匹配除标点符号之外的所有非单词的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41311605/