查找没有双字符串的所有行

Find all lines without a double string

我想找到所有 没有 双重数字的行。

我知道如何在一条线上找到双数:

/\zs\(\d\d\d\.\d\d\).*\ze

但是我不知道如何找到没有这个双数的行(上面正则表达式的否定匹配)

这个部分做了我想要的:

/^\(\(.*\d\d\d\.\d\d.*\)\{2,}\)\@!.*.*$

p.e.: 未找到行 201.12 text 201.12 --> OK
但也找不到行 201.12 text 203.12 --> 不正常
必须找到最后一行,因为数字不一样。 我做错了什么?

试试这个:

/^.*$\&\%(.*\(\d\{3}\.\d\{2}\).*\)\@!.*

或者用魔法:

/\v^.*&%(.*(\d{3}\.\d{2}).*)@!.*

编辑:

其实\&是没有必要的。这个比较简单:

\v^%(.*(\d{3}\.\d{2}).*)@!.*

我会选择这个:

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

?= 是一个非消耗运算符。它在等号右侧查找正则表达式,但将其留给以下表达式进行检查。因此,它再次测试字符串。然后它检查是否包含第一个匹配项。如果找到,则查询失败(因为?!) - 如果未找到,则继续下一个。*

这个有点棘手。这是基于前瞻的模式,假设每一行都有 2 个十进制数:

/\v^((\d{3}\.\d{2})@!.)*(\d{3}\.\d{2})(.*)@!.*

RegEx Demo