正则表达式仅在前面没有特定单词时才匹配字符
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
相反,我通过 运行 正则表达式两次并减去结果做了一个解决方法:
- 查找换行符的所有索引:
\n
- 查找以 2 位小数开头的换行符的所有索引:
\d*\.\d\d\n
- 从步骤 1 中找到的索引中删除步骤 2 中找到的索引
但我确信有一种方法可以一蹴而就,如果有人能帮助我找到解决方案,我将不胜感激:)
当您可以使用 string.split()[-1] 捕获最终单词并测试您需要的形式时,为什么还要对正则表达式深奥呢? Python 不是 Perl(幸运的是)。
您需要使用负向后视而不是负向前视:
(?<!\.\d\d)\n
这将匹配 \n
如果前面没有紧跟点和 2 位数字。
目标是让正则表达式匹配所有前面没有 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
相反,我通过 运行 正则表达式两次并减去结果做了一个解决方法:
- 查找换行符的所有索引:
\n
- 查找以 2 位小数开头的换行符的所有索引:
\d*\.\d\d\n
- 从步骤 1 中找到的索引中删除步骤 2 中找到的索引
但我确信有一种方法可以一蹴而就,如果有人能帮助我找到解决方案,我将不胜感激:)
当您可以使用 string.split()[-1] 捕获最终单词并测试您需要的形式时,为什么还要对正则表达式深奥呢? Python 不是 Perl(幸运的是)。
您需要使用负向后视而不是负向前视:
(?<!\.\d\d)\n
这将匹配 \n
如果前面没有紧跟点和 2 位数字。