Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用Regex-edge-case问题检测段落中断_Python_Regex - Fatal编程技术网

Python 用Regex-edge-case问题检测段落中断

Python 用Regex-edge-case问题检测段落中断,python,regex,Python,Regex,我有一个很长的文本字符串,其中新行的格式很差。我想删除所有换行符,除非换行符跟在,?,后面,:char(表示句子的结尾)。我也不想删除换行符,如果它后面紧跟着一个数字或另一个换行符-这将表明一章结束。我正在为正则表达式使用pythonre 这是到目前为止我的正则表达式(?) 带有7个单元测试用例的正则表达式示例: 我的测试在以下示例中失败: First paragraph. <-- note a trailing space(s) after the period Second para

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

这是到目前为止我的正则表达式
(?)

带有7个单元测试用例的正则表达式示例:

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

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

第一段。通过对上述文本的研究,我们可以得出结论,实际的错误格式是由于存在大量空格造成的。
因此,可以通过用一个空格
\1\2
将单词/字母之间间隔的每一块
([a-zA-Z])\s+([a-zA-Z])
进行处理

re.sub(r'([a-zA-Z])\s+([a-zA-Z])','\1 \2',Text)
根据以下链接:

最后,将结果复制并粘贴到word文档中,以确保其可接受或不可接受。

一个选项是在匹配
或换行后,使用
[^\S\r\n]*
在查找后匹配可选的空白字符,而不使用换行符

您可以使用替换的
|
将其缩短为使用列出所有字符的列表

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

(以JavaScript引擎为例)

是否有必要一步用一个正则表达式解决所有问题?此正则表达式将删除文档中除少数重要换行符之外的所有换行符。这些换行符消失后,我无法返回并重新插入。因此必须一步完成。您可以尝试((?您提供的文本中没有
第一段。
。此外,根据您概述的规则,模式只是
\n(?![.?!:\d\n\r])
。这适用于regex包!通常从现在起将使用regex而不是re