21

このパターン(?<!(asp|php|jsp))\?.*は PCRE では機能しますが、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>

これはまさにあなたのパターンがどのように振る舞うべきかです。Matchglglgl が述べたように、そのオブジェクトを変数 (たとえばm)に割り当ててから を呼び出すと、一致を取得できますm.group()。それが得られ?1=123ます。

ちなみに、内括弧は省略できます。このパターンは同等です:

(?<!asp|php|jsp)\?.*
于 2012-12-19T08:10:49.717 に答える