MENU

~Python:正規表現6〜(貪欲マッチと非貪欲マッチ)

目次

〜貪欲マッチと非貪欲マッチ〜

貪欲マッチ

a=re.compile(r'(Ha){3,5}') #Haを3〜5回繰り返す文字列とマッチする
b=a.search('HaHaHaHaHa')
print(b)

#出力結果は
<re.Match object; span=(0, 10), match='HaHaHaHaHa'> #Ha5つとマッチしています

{3,5} は「3~5回繰り返す」という意味です。

正規表現はデフォルトでは できるだけ長くマッチしようとする(貪欲マッチ) ため、HaHaHaHaHa 全体(Haが5個)にマッチします。

非貪欲マッチ

a=re.compile(r'(Ha){3,5}?')
b=a.search('HaHaHaHaHa')
print(b)

出力結果は
<re.Match object; span=(0, 6), match='HaHaHa'> #Ha3つとだけマッチ 

? を付けて {3,5}? とすると、できるだけ短くマッチする(非貪欲マッチ) ようになります。

そのため、条件を満たす最小回数である HaHaHa(Haが3個)だけにマッチします。

まとめ

正規表現マッチする文字列
(Ha){3,5}HaHaHaHaHa(最大5個)
(Ha){3,5}?HaHaHa(最小3個)

? を付けることで、条件を満たす範囲の中で最も短い文字列にマッチする(非貪欲マッチになる)

感想

正直どういった場面でこれを使うことになるのか、全く想像つかない。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

FIREを目指しながら、投資・プログラミング・家庭菜園・資格勉強に取り組んでいます。試行錯誤しながら積み上げる日々を記録するブログです。

コメント

コメントする

目次