パターン(?<!(asp|php|jsp))\?.*
はPCREで動作しますが、Pythonでは動作しません。Python正規表現ネガティブルックアヘッド
だから、この正規表現をPythonで動かすにはどうすればよいですか? (Python 2.7)
パターン(?<!(asp|php|jsp))\?.*
はPCREで動作しますが、Pythonでは動作しません。Python正規表現ネガティブルックアヘッド
だから、この正規表現をPythonで動かすにはどうすればよいですか? (Python 2.7)
それは私にとって完璧に機能します。多分それを間違って使っていますか? re.match
の代わりにre.search
を使用してください:
>>> 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 | html)'ではなく、(?<!asp | php | jsp) 'を実行します。 – georg