仅在不包含特定单词的情况下,正则表达式匹配字符

问题描述 投票:1回答:1

目标是使正则表达式匹配所有不以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

编辑:我后来发现这不起作用的原因是因为Python的Regex不支持可变长度的负前瞻-它仅支持固定长度的负前瞻。

不幸的是,定长的前瞻仍然无法正常工作:

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

相反,我通过两次运行正则表达式并减去结果来进行解决:

  1. 查找所有换行符索引:\ n
  2. 查找所有以2个十进制数字开头的换行符的索引:\ d *。\ d \ d \ n
  3. 从步骤1中找到的答案中删除步骤2中找到的索引

但是我敢肯定,有一种方法可以一口气做到这一点,我将感激任何能帮助您找到解决方案的人:)

python regex regex-lookarounds regex-negation
1个回答
0
投票

为什么只用string.split()[-1]捕获最后一个单词并测试所需的形式,为什么对正则表达式却难以理解? Python不是Perl(幸运的是)。

© www.soinside.com 2019 - 2024. All rights reserved.