模式(?<!(asp|php|jsp))\?.*
在PCRE中工作,但它在Python中不起作用。Python Regex負面看法
那麼我能做些什麼來得到這個正則表達式在Python中的工作? (Python 2.7)
模式(?<!(asp|php|jsp))\?.*
在PCRE中工作,但它在Python中不起作用。Python Regex負面看法
那麼我能做些什麼來得到這個正則表達式在Python中的工作? (Python 2.7)
它對我來說工作得很好。你可能用錯了嗎?確保使用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)\?.*
...和're.search(r「(?<!(asp | php | jsp))\? 。*「,s).group()'給出''?1 = 123''。 – glglgl
它是如何工作的?它會給出錯誤嗎?如果是這樣,請發佈錯誤。它與您所期望的不符?如果是這樣,將代碼發佈到你使用它的地方,並顯示你得到的輸出與你的期望。 – BrenBarn
下面是關於re模塊的[doc](http://docs.python.org/2/library/re.html),清楚地說明了負向lookbehind斷言的支持。 –
只要所有替代品具有相同的長度,負面的後視鏡就可以工作。所以這個工作'(?<!asp | php | jsp)',但不是這個'(?<!asp | php | html)'。 – georg