对于这样的句子:
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
匹配每个非单词,然后排除[.,;!?]
以保留标点符号。我尝试的最后一个RegEx是:
re.sub(r"(\W[^\.\,\;\?\!])", "", sent)
不幸的是,[^\.\,\;\?\!]
确实与任何不包含[.,;!?]
条目的内容相匹配,而不是简单地说 匹配这些字符&#39} ;
如何从匹配中排除这些字符?
答案 0 :(得分:1)
\W
需要集成到否定的字符类中。 \W
与[^\w]
相同,因此您最终会得到[^\w.,;!?]
。您应该重复此字符类,以便在一个步骤中匹配连续出现的事件 - [^\w.,;!?]+
。
您似乎也希望保留空格,因此您应该将它们添加到角色类中。
深入研究您的问题,您还希望用空格替换换行符,用!
替换.
。这使它成为一个多步骤的解决方案。首先过滤掉所有不需要的[^\w.,;!? \n]+
,然后在下一步中将\n
替换为,将
!
替换为.
。