python - 用于匹配除标点符号之外的所有非单词的正则表达式?

标签 python regex python-3.x replace

对于这样的句子:

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/

相关文章:

python - Pandas 将列折叠成一列

python - 如何仅通过命令行在虚拟机中启动并运行服务器?

python - 如何在dask中绘制直方图?

javascript - 如何修改正则表达式以匹配句子

javascript - 使用 JavaScript RegEx 从 html 标签中删除不必要的属性

python - 使用 f 字符串固定小数点后的数字

python - 在函数之外使用变量

python - 我如何与来自 DHT 网络的同行进行通信?

python - 如何调整 matplotlib 散点图的大小

java - 如何使用Java正则表达式来匹配这个模式?