2010-04-09 34 views
4

我正在尋找一個正則表達式來搜索我的python程序,以找到foo但不是bar作爲關鍵字參數傳遞給方法的所有行。我正在玩先行和後視斷言,但沒有多少運氣。正則表達式找到A而不是B行

任何幫助?

感謝

回答

5

如果你有,你想找到一個字符串foo和另一個字符串bar必須不存在,您可以使用此:

^(?!.*bar).*foo 

創建一個正則表達式,恰好滿足所有由於Python代碼不是常規語言,因此您的需求非常困難,但希望您能夠以此爲出發點來獲得足夠滿足您需求的內容。

+0

我相當有信心,所有的事件都是在同一條線上,如果我錯過了一些它不」沒關係。我剛剛提到python給一些上下文。 – Zach 2010-04-09 20:23:07

+0

This Works ... thanks ..... + 1 and selected as correct – Zach 2010-04-09 20:25:33

+0

@Zach,Mark的意思是字符串bar可能不會是關鍵字(或者你是指標識符?):它可能是在字符串文字或註釋的一部分內。 – 2010-04-09 20:26:16

2

在之後擁有^這些場景中的lookahead似乎總是對我更好。讀它對我來說也更有意義。

(?!.*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 
+0

你可以發佈一個字符串,在將'^'放在它之後而不是之前放置時工作「更好」嗎? – 2010-04-09 20:24:20

+0

謝謝... + 1,但你的時間得到了擊敗 – Zach 2010-04-09 20:25:11

+0

這個大的道具,python regex令人沮喪的解決了。試圖查找某個名稱的所有文件,但排除了任何波浪號備份文件。 (?!。*〜)^。* filename.ext – Halsafar 2015-06-18 18:48:47

2

你也可以用不是一個正則表達式做到這一點:

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

我正在搜索許多文件,因此使用一個需要正則表達式並處理文件遍歷的工具要容易得多。 雖然感謝 – Zach 2010-04-09 20:47:05

+0

當然。我喜歡正規表達式並每天使用它們。值得注意的是,有時候,你應該準確地告訴程序你想要什麼並且讓自己頭疼。 ;) – Ipsquiggle 2010-04-16 15:49:05