代码之家  ›  专栏  ›  技术社区  ›  vlad_tepesch

带有否定展望的正则表达式

  •  0
  • vlad_tepesch  · 技术社区  · 11 年前

    我有很多这样的台词:

    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 回复  |  直到 11 年前
        1
  •  1
  •   Avinash Raj    11 年前

    您可以尝试下面的正则表达式,它使用负先行。

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

    ^\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).)*$