質問: re.search(pattern, s) if match is not None: print(match.group(0)) ``` patternを **r"a{2,4}?"** にすると"**aa**"が返ってくるのに **r"a{2,4}?b"** だとaの数が4つになるのが気持ち悪いです。 これはPythonのバグなのでしょうか。公式ドキュメントには"少なく 繰り返したものとマッチする"と書かれているのですが。。 バージョンは 2.7.11 です。 (バージョン3ではどのような挙動になるのかも、教えていただけると助かります。)
回答: `search()`の仕様からこのような挙動になります。 > > string を走査し、正規表現 pattern がマッチを生じさせる最初の場所を探して > > > 文字列の左端から順々にマッチするかどうか試して、マッチした時点で終了します。マッチ開始位置が0に近いものが優先されるわけです。 もし希望の動作が欲しいなら、`search()`は使えません。すべての位置からのマッチを記録して、マッチした長さが最小のものを選びます。