2010-04-03 51 views
3

我有以下的正則表達式:停止匹配:固定回顧後

(?P<question>.+(?<!\[\[)) 

它被設計成字符串hello world! [[A string typically used in programming examples]]

然而,我只是整個字符串匹配匹配hello world!,我無法弄清楚爲什麼。我嘗試了所有風格的環視,但它不會工作...

任何人都知道如何解決這個問題?

謝謝,
CFP。

回答

3

您只在比賽結束時檢查環視,這意味着它可以儘可能匹配字符串,然後檢查環視。由於在字符串末尾沒有[[,所以匹配成功。

你需要做的,如果你真的想在這裏使用正則表達式是什麼檢查環視每多加一個字,就像這樣:

>>> s = 'hello world! [[A string typically used in programming examples]]' 
>>> regex = re.compile('(?P<question>((?!\[\[).)+)') 
>>> regex.match(s).group('question') 
'hello world! ' 

但是請注意,這將是更容易只是使用像s.find('[[')而不是這裏的正則表達式。

+0

太好了,謝謝!事實上,這個正則表達式實際上是一個較大模板的一小部分,這證明了使用正則表達式的正確性。 – 2010-04-04 20:01:06