正则表达式删除某些换行符 (Python)
Regex removing certain newlines (Python)
我正在寻找一个正则表达式,当以下行不以数字开头时,它允许我删除某些“\r\n”字符(或仅在 Python 中删除 \n)
在 Perl 中,我通过匹配 \r\n(?!\d)
并替换为 </code> 来实现这一点(为了不丢失下一行中匹配的字符),但是当我在 [=20= 中尝试这样做时] (<code>\n(?!\d)
),它删除了我文档中的每个 \n
。
根据您的评论,我很确定问题在于您将匹配应用于个别行,而不是一次应用于整个文本。如果换行符是输入字符串中的最后一个字符,则零宽度负先行(您正在使用 (?!\d)
)将成功匹配,如果您的代码逐行工作,情况就是如此。前瞻基本上是 "match if not followed by a digit"。如果输入字符串中没有任何内容,那总是正确的。
您无法通过更改正则表达式来解决此问题。您在单行上检查的任何内容都无法告诉您下一行的内容,因此您需要以某种方式更改周围的代码。一种方法是阅读和转换整个文本,而不是一次只读一行。或者您可以使用类似 the pairwise
recipe from itertools
的方法一次检查两行,然后检查第二行以决定是否需要转换第一行。
我还想指出,用
代替是不合适的,因为您没有捕获组(模式中的括号是零宽度先行语法的一部分,而不是分组语法) .您应该只替换为一个空字符串(这实际上就是您正在做的事情,因为反向引用不引用任何东西)。
我正在寻找一个正则表达式,当以下行不以数字开头时,它允许我删除某些“\r\n”字符(或仅在 Python 中删除 \n)
在 Perl 中,我通过匹配 \r\n(?!\d)
并替换为 </code> 来实现这一点(为了不丢失下一行中匹配的字符),但是当我在 [=20= 中尝试这样做时] (<code>\n(?!\d)
),它删除了我文档中的每个 \n
。
根据您的评论,我很确定问题在于您将匹配应用于个别行,而不是一次应用于整个文本。如果换行符是输入字符串中的最后一个字符,则零宽度负先行(您正在使用 (?!\d)
)将成功匹配,如果您的代码逐行工作,情况就是如此。前瞻基本上是 "match if not followed by a digit"。如果输入字符串中没有任何内容,那总是正确的。
您无法通过更改正则表达式来解决此问题。您在单行上检查的任何内容都无法告诉您下一行的内容,因此您需要以某种方式更改周围的代码。一种方法是阅读和转换整个文本,而不是一次只读一行。或者您可以使用类似 the pairwise
recipe from itertools
的方法一次检查两行,然后检查第二行以决定是否需要转换第一行。
我还想指出,用 代替是不合适的,因为您没有捕获组(模式中的括号是零宽度先行语法的一部分,而不是分组语法) .您应该只替换为一个空字符串(这实际上就是您正在做的事情,因为反向引用不引用任何东西)。