私は、グループがオプション?
であっても、それがまだ欲張りであり、の場合は、の場合は正規表現の次の部分に行く前にそれを消費すると考えました。私のオプションのグループが欲張っていないのはなぜですか? /(5)?.*/
私は(5).*
対簡素化正規表現(5)?.*
(グループ1 ないオプション)を指定すると、私はまったく同じ文字列を使用して同じ動作を期待していても、Pythonの2.7.6で異なる動作を参照してください。
>>> import re
>>> s = 'before [5.5s] after'
>>> r = re.compile(r'(5)?.*')
>>> print r.search(s).groups()
(None,)
>>> r2 = re.compile(r'(5).*')
>>> print r2.search(s).groups()
('5',)
私は何を得ていないのですか?なぜ最初の正規表現r
は5を吸い取っていないのですか?
注:私はこの特定の正規表現は、私を助けにはなりませんを解決するための試みとして、なぜの理論を必要とします。これはSSCCEです。私はより複雑な正規表現を持っています。私は実際にはについての知識のギャップを埋めることを望みます。なぜなら、というオプションのグループは、私が思っていたほど貪欲ではありません。
'(5)?'は空の文字列にマッチすることができ、正規表現エンジンは文字列を左から右に解析するので、 '(5)?'は文字列と '。*'は残りの行と一致します。 –
また、 're.compile( '(。*)(。*)')。search( 'abc')。groups()は' 'abc '、' ')を生成します。なぜなのかご存知ですか? –
'search'は文字列の先頭からマッチングを開始します。一致した場合(これらの場合のように)、他の開始インデックスは考慮されません。 – myaut