21

该模式(?<!(asp|php|jsp))\?.*在 PCRE 中有效,但在 Python 中无效。

那么我该怎么做才能让这个正则表达式在 Python 中工作呢?(Python 2.7)

4

1 回答 1

23

它对我来说非常好。你可能用错了吗?确保使用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)\?.*
于 2012-12-19T08:10:49.717 回答