Regex 正则表达式与行不匹配
我想问一下如何生成一个正则表达式,它将选择不包含此模式的所有行:Regex 正则表达式与行不匹配,regex,line,Regex,Line,我想问一下如何生成一个正则表达式,它将选择不包含此模式的所有行:(.*:.*) 我是这样试的 ^((?!(.*:.*)).)*$ 从中,但我无法使其工作。在我看来,您似乎正在尝试选择所有不包含:的行 为此,可以使用以下正则表达式: ^([^::]+)$只需使用此模式,为全局设置选项g,为多行设置选项m: ^([^:]*)$ 如果不想捕获空行(未指定),请将*更改为+ Fiddle:使用以下正则表达式: ^(?!(.*:.*)).*(\n|$) ?!(.*:.*)是一种消极的前瞻,以确保前
(.*:.*)
我是这样试的
^((?!(.*:.*)).)*$
从中,但我无法使其工作。在我看来,您似乎正在尝试选择所有不包含
:
的行
为此,可以使用以下正则表达式:
^([^::]+)$
只需使用此模式,为全局设置选项g
,为多行设置选项m
:
^([^:]*)$
如果不想捕获空行(未指定),请将*
更改为+
Fiddle:使用以下正则表达式:
^(?!(.*:.*)).*(\n|$)
?!(.*:.*)
是一种消极的前瞻,以确保前面没有模式匹配
这样一个包含零个或多个字符的行由下面的*
匹配,它后面必须跟新行(\n)或字符串结尾($)。我相信(.*:*)表示任何字符的0个或多个,后跟“:”,后跟任何字符的0个或多个。因此,以下内容将与之匹配
- a:b
- abc:def
- :abc
- abc:
- :
^[^:]+$
我错过了新线谢谢你的回复。我想问一下,是否可以从一开始就删除所有带冒号的行,直到出现三行不带冒号的行?现在我有了正则表达式,它匹配带冒号的行和不带冒号的行,但不能组合在一起。就个人而言,我不会用正则表达式做这样的事情。该操作更适合于您使用的任何语言。在这一点上,阅读每一行,确定它是否有一个
:
,并相应地采取行动可能会更容易。一旦进入更复杂的find/replace/remove操作,Regex就变得不那么有用,使用起来也更复杂,因此通常建议只使用编写代码的任何父语言来完成工作,因为它通常效率更高,更容易阅读。值得注意的是,grep有一个标志-v
,它可以反转结果,即显示所有与传入的模式不匹配的行。