用正则表达式边缘事例问题检测段落中断

2024-05-16 18:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的文本字符串,其中新行的格式很差。我想删除所有的换行符,除非换行符跟在.?!:字符后面(这表示句子结束)。我也不想删除换行符,如果它后面紧跟着一个数字或另一个换行符-这将表明一章结束。我正在使用python re作为正则表达式

这是到目前为止我的正则表达式(?<!\?|\.|:|\n)\n(?![\d]|\n)

带有7个单元测试用例的正则表达式示例:https://regex101.com/r/nG1gU7/1118

我的测试在以下示例中失败:

First paragraph.  <-- note a trailing space(s) after the period
Second paragraph

我该如何解决这个问题


Tags: 字符串https文本recom示例格式测试用例
2条回答

一种选择是在匹配?{}{}或换行符之一后,使用regex PyPi module和在lookback中匹配不带换行符的可选空白字符

您可以使用替换|缩短为使用列出所有字符的character class

(?<![?.:\n\r][^\S\r\n]*)\r?\n(?![\d\r\n])

Regex demo(选择JavaScript引擎作为示例)

通过对上述文本的研究,我们可以得出结论,实际的错误格式化是由于存在大量空格造成的。 因此,它可以通过用一个类似于\1 \2的空格来替代单词/字母之间间隔的每个块来处理

re.sub(r'([a-zA-Z])\s+([a-zA-Z])','\1 \2',Text)

根据以下链接:https://regex101.com/r/feRwne/1

最后,将结果复制并粘贴到word文档中,以确保结果是否可接受

相关问题 更多 >