查找没有双字符串的所有行
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})(.*)@!.*
我想找到所有 没有 双重数字的行。
我知道如何在一条线上找到双数:
/\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})(.*)@!.*