正则表达式仅在前面没有特定单词时才匹配字符

Regex match character only when NOT preceeded by specific word

目标是让正则表达式匹配所有前面没有 2 位小数的换行符。下面是一些示例文本:

This line ends with text
this line ends with a number: 55
this line ends with a 2-decimal number: 5.00
here's 22.22, not at the end of the line

正则表达式应匹配第 1、2 和 4 行的末尾(假设第 4 行后有一个换行符)。我认为否定前瞻是答案,所以我尝试了

(?!\d*\.\d\d)\n

没有成功,如这个 regex101 片段所示:https://regex101.com/r/qbrKlt/4

Edit: I later discovered the reason this didn't work is because Python's Regex doesn't support variable length negative lookahead - it only supports fixed-length negative lookahead.

不幸的是,固定长度的前瞻性仍然没有用:

(?!\.\d\d)\n

相反,我通过 运行 正则表达式两次并减去结果做了一个解决方法:

  1. 查找换行符的所有索引:\n
  2. 查找以 2 位小数开头的换行符的所有索引:\d*\.\d\d\n
  3. 从步骤 1 中找到的索引中删除步骤 2 中找到的索引

但我确信有一种方法可以一蹴而就,如果有人能帮助我找到解决方案,我将不胜感激:)

当您可以使用 string.split()[-1] 捕获最终单词并测试您需要的形式时,为什么还要对正则表达式深奥呢? Python 不是 Perl(幸运的是)。

您需要使用负向后视而不是负向前视:

(?<!\.\d\d)\n

Updated RegEx Demo

这将匹配 \n 如果前面没有紧跟点和 2 位数字。