MENU

~Python:正規表現4 (全てのマッチfindall)

アプリ開発への道
目次

Pythonのfindall()とは?

findall()は、正規表現にマッチしたすべての文字列を返します。

グループがない場合

正規表現にグループが含まれない場合、文字列のリストを返します。

import re
a=re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d') #グループなし
mo=a.findall('私の携帯電話番号は090-0000-8888,ハヤトの電話番号は080-0000-9999です')
print(mo)

#出力結果は
['090-0000-8888', '080-0000-9999']

グループがある場合

正規表現にグループが含まれる場合は、タプルのリストを返します。

import re
a=re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)') #グループ化
mo=a.findall('私の携帯電話番号は090-0000-8888,ハヤトの電話番号は080-0000-9999です')
print(mo)

#出力結果は
[('090', '0000-8888'), ('080', '0000-9999')]

注意点:マッチする部分は重なり合わない

findall()では、一度マッチした部分と重なる文字列は検索対象になりません。

import re
a=re.compile(r'\d{3}')
mo=a.findall('123456')
print(mo)

#出力結果は
['123', '456'] #'234'や'345'はマッチしない。

'123'がマッチした時点で、その次は4文字目から検索が再開されます。

そのため、

  • '234'
  • '345'
    のように、すでにマッチした部分と重なる文字列は取得されません。
まとめ

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

この記事を書いた人

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

コメント

コメントする

目次