2012-12-19 62 views
8

模式(?<!(asp|php|jsp))\?.*在PCRE中工作,但它在Python中不起作用。Python Regex負面看法

那麼我能做些什麼來得到這個正則表達式在Python中的工作? (Python 2.7)

+6

它是如何工作的?它會給出錯誤嗎?如果是這樣,請發佈錯誤。它與您所期望的不符?如果是這樣,將代碼發佈到你使用它的地方,並顯示你得到的輸出與你的期望。 – BrenBarn

+0

下面是關於re模塊的[doc](http://docs.python.org/2/library/re.html),清楚地說明了負向lo​​okbehind斷言的支持。 –

+3

只要所有替代品具有相同的長度,負面的後視鏡就可以工作。所以這個工作'(?<!asp | php | jsp)',但不是這個'(?<!asp | php | html)'。 – georg

回答

9

它對我來說工作得很好。你可能用錯了嗎?確保使用re.search而不是re.match

>>> import re 
>>> s = 'somestring.asp?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
>>> s = 'somestring.xml?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
<_sre.SRE_Match object at 0x0000000002DCB098> 

這正是你的模式應該如何表現。正如glglgl所提到的,如果您將Match對象分配給變量(如m),然後再撥m.group(),則可以獲得匹配結果。這產生了?1=123

順便說一句,您可以省略內部圓括號。這種模式是等效的:

(?<!asp|php|jsp)\?.* 
+1

...和're.search(r「(?<!(asp | php | jsp))\? 。*「,s).group()'給出''?1 = 123''。 – glglgl