正则表达式删除某些换行符(Python)

时间:2016-05-04 15:32:20

标签: python regex newline

我正在寻找一个正则表达式,它允许我删除某些“\ r \ n”字符(或只是在Python中的\ n)当以下行不以数字开头时

在Perl中,我通过匹配\r\n(?!\d)并替换为\1来实现此目的(为了不丢失下一行中匹配的字符),但是当我在Python中尝试时({{1} }),它会删除文档中的每个\n(?!\d)

1 个答案:

答案 0 :(得分:1)

根据您的评论,我非常确定问题是您将匹配应用于各行,而不是一次性应用于整个文本。如果换行符是输入字符串中的最后一个字符,那么零宽度否定前瞻(您正在使用(?!\d))将成功匹配,如果您的代码逐行工作将是这种情况。前瞻基本上说"匹配如果没有后跟数字"。如果输入字符串中没有任何内容,则总是如此。

您无法更改正则表达式以解决此问题。您在一行中检查的任何内容都无法告诉您下一行的内容是什么,因此您需要以某种方式更改周围的代码。一种方法是读取和转换整个文本,而不是一次只读一行。或者您可以使用the pairwise recipe from itertools之类的内容一次检查两行,并检查第二行以确定是否需要转换第一行。

我还要注意,用\1替换是不合适的,因为你没有捕获组(模式中的括号是零宽度先行语法的一部分,而不是分组语法) 。你应该用一个空字符串代替(这实际上是你正在做的事情,因为反向引用并没有引用任何东西)。