アプリ開発への道
目次
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'
のように、すでにマッチした部分と重なる文字列は取得されません。
まとめ
findall()は、マッチしたすべての文字列を取得する。- グループがない場合は、文字列のリストを返す。
- グループがある場合は、タプルのリストを返す。
- マッチする部分は互いに重ならない。

コメント