正面表达,负面向前看

时间:2014-09-09 12:04:26

标签: regex

我有很多像以下几行:

55, cpp: 1e+06,1e+06,    c:1e+06,1e+06,  ...
56, cpp: 0.2342,0.2342,    c:1e+06,1e+06,  ...
57, cpp: 1e+06,1e+06,    c:1e+06,1e+06,  ...
58, cpp: 1e+06,0.2342,    c:1e+06,1e+06,  ...
59, cpp: 3.453,3.453,    c:3.453,3.453,  ...

我想过滤那些包含c:1e+06,1e+06但不包含cpp: 1e+06,1e+06的行 在示例中

56, cpp: 0.2342,0.2342,    c:1e+06,1e+06,  ...
58, cpp: 1e+06,0.2342,    c:1e+06,1e+06,  ...

我试过像^\d+, cpp: (?!1e\+06,1e\+06), c:1e\+06,1e\+06这样的东西,但我对前瞻性的东西并不是很熟悉。

提前谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试使用负前瞻的下面的正则表达式。

^(?:(?!cpp:\s*1e\+06,1e\+06).)*c:1e\+06,1e\+06.*$

OR

^\d+, (?:(?!cpp:\s*1e\+06,1e\+06).)*c:1e\+06,1e\+06.*$

DEMO

^(?:(?!cpp:\s*1e\+06,1e\+06).)*c:1e\+06,1e\+06(?:(?!cpp:\s*1e\+06,1e\+06).)*$