Шаблон (?<!(asp|php|jsp))\?.*
работает в PCRE, но не работает в Python.
Итак, что я могу сделать, чтобы это регулярное выражение работало в Python? (Питон 2.7)
Шаблон (?<!(asp|php|jsp))\?.*
работает в PCRE, но не работает в 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'
.
- person glglgl; 19.12.2012
(?<!asp|php|jsp)
, но не(?<!asp|php|html)
. - person georg   schedule 19.12.2012