パターンにマッチしたすべてのマッチオブジェクトを取得する(Pattern.finditer)
【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと
【finditerメソッドの書式と使い方】
Pattern クラスの finditer メソッドは、対象の文字列の中でパターンにマッチしたすべてのマッチオブジェクトを取得するためのイテレータを取得する。
・書式
Pattern.finditer(string[, pos[, endpos]])
1 番目の引数に対象の文字列を、省略可能な 2 番目と 3 番目の引数には範囲を指定する。
サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import re
>>> msg = 'MA-52, JO-72, PP-45'
>>> pattern = re.compile(r'[A-Z]{2}-[0-9]{2}')
>>> result = pattern.finditer(msg)
>>> for m in result:
print(m.group())
MA-52
JO-72
PP-45
>>>
【パターンにキャプチャグループが設定されている場合】
パターンにキャプチャグループが設定されている場合、マッチオブジェクトからキャプチャグループにマッチした文字列を個別に取得することができます。
>>> import re
>>> msg = 'MA-52, JO-72, PP-45'
>>> pattern = re.compile(r'([A-Z]{2})-([0-9]{2})')
>>> result = pattern.finditer(msg)
>>> for m in result:
print('Match:' + m.group(0))
print('Group1:' + m.group(1))
print('Group2:' + m.group(2))
Match:MA-52
Group1:MA
Group2:52
Match:JO-72
Group1:JO
Group2:72
Match:PP-45
Group1:PP
Group2:45
>>>
【パターンにマッチしなかった場合の処理】
finditer メソッドを使う場合は戻り値がイテレータとなります
サンプルコード
>>> import re
>>> msg = 'Sample'
>>> pattern = re.compile(r'[A-Z]{2}-[0-9]{2}')
>>> result = pattern.finditer(msg)
>>> m = None
>>> for m in result:
print(m.group())
>>> if m is None:
print('Don\'t matched')
Don't matched
>>>
イテレータを使って取り出したマッチオブジェクトを格納する変数に対して、あらかじめ None を設定しておきます