2011-08-23 36 views
2

我試圖讓比賽但我有與語法的麻煩,下面我使用python,但它可以是任何語言,我只需要正確的正則表達式的語法:如何找到與某個字符串不匹配的任何內容?

import re 
p = re.compile('foo%22([^%22])*') 

input = "foo%22somedata%2Bgoeshere%22testbarbaz" 

result = re.findall(p, input) 

我想提取「somedata%2Bgoeshere」。基本上我想要%22之間的東西。所以我嘗試的正則表達式(上面)不工作的B/C,'不'操作員說'不%','不是2'和'不是2'...我想說,得到任何東西,直到你看到「%22」。

在此先感謝。

回答

4

使用積極前瞻:

>>> import re 
>>> input = "foo%22somedata%2Bgoeshere%22testbarbaz" 
>>> re.findall('foo%22.*?(?=%22)', input) 
['foo%22somedata%2Bgoeshere'] 
+0

謝謝@phihag,這似乎工作! – codecraig

+0

@codecraig - 如果它適合你,請不要忘記接受答案。 –

+1

@Justin Morgan - 我知道,它告訴我我必須等6分鐘才能接受,所以我在瀏覽器中打開了一個標籤,提醒我回來(我現在有:) – codecraig

4

爲什麼你需要一個正則表達式?簡單地做一個分割上%22

>>> input.split("%22") 
['foo', 'somedata%2Bgoeshere', 'testbarbaz'] 

你想要的東西是什麼,是不是返回結果的第一個和最後一個元素。 KISS

+0

所以我提到我的代碼片段在問題是用Python編寫的,但我真正需要的只是正確的正則表達式。 @ phihag的答案適合我。 – codecraig

2

這是我拿

mo = re.search("%22(.*?)%22", input) 
print mo.groups(1) 

重要的是你限制.*?,使之儘快停止,因爲它可以匹配閉幕「%22」。

+0

+1:看起來正是OP想要達到的目標(我記得在發現'。*?'之前自己也有同樣的問題) – Steven

相關問題