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

在一条线上找到A而不是B

  •  4
  • Zach  · 技术社区  · 14 年前

    我正在寻找一个regex来搜索我的python程序以查找所有行 foo ,但不是 bar ,作为关键字参数传递到方法中。我在玩“向前看”和“向后看”的断言,但运气不好。

    有什么帮助吗?

    谢谢

    3 回复  |  直到 14 年前
        1
  •  7
  •   Mark Byers    14 年前

    如果你有一根绳子 foo 和另一个字符串 bar 不能存在,您可以使用:

    ^(?!.*bar).*foo
    

    创建一个完全满足所有需求的正则表达式是非常困难的,因为python代码不是一种常规语言,但是希望您能够将它作为一个起点来获得满足您需求的足够好的东西。

        2
  •  3
  •   maček    14 年前

    拥有 ^ 之后 在这些情况下,这些表头似乎总是对我更好。阅读对我来说也更有意义。

    (?!.*bar)^.*foo

    this has a foo          # pass
    so does this has a foo  # pass
    i can haz foo           # pass
    but i haz foo and bar!  # fail
    
        3
  •  1
  •   Ipsquiggle    14 年前

    您也可以不使用regex执行此操作:

    for line in file:
        if "foo" in line and "bar" not in line:
            #do something