reモジュールのfinditerメソッド
モジュール re の finditer メソッドは、
文字列内の 正規表現 に一致する全てのイテレーターを返します。
メソッドの最初のパラメータには正規表現を指定します。
第二パラメータには、正規表現を検索する文字列を指定します。
第三のオプションパラメータでは フラグ を指定できます。
このメソッドは、左から右に向かって全ての一致を検索し、確認します。
構文
import re
re.finditer(正規表現, 文字列, [フラグ])
例
文字列内の数字を含む全ての部分文字列を見つけてみましょう:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
print(res)
コード実行結果:
<callable_iterator object at 0x000002AA891300A0>
例
次に、前の例で取得したオブジェクトを値とする変数 res を宣言し、
それをループで反復処理してみましょう:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)
for el in res:
print(el)
コード実行後、2つのMatch objectが得られます:
<re.Match object; span=(5, 8), match='123'>
<re.Match object; span=(14, 17), match='456'>
これらのオブジェクトには、タプル形式での正規表現との全ての一致に関する情報が含まれています。 インデックスを使用して、一致した部分を抽出できます:
for el in res:
print(el[0])
コード実行結果:
'123'
'456'
例
よりわかりやすくするため、一致を検索する際にグループを使用してみましょう。 そして、ループでオブジェクトを反復処理する際に、最初の一致(これは0番目のグループとみなされます)と、 その要素もそれぞれグループに分けて出力してみましょう:
txt = 'aaaa 123 bbbb 456'
res = re.finditer('(\d)(\d)', txt)
for el in res:
print(el[0], el[1], el[2])
コード実行後、0番目のグループ(つまり部分文字列全体)と、 その部分文字列の最初と2番目の文字が得られます:
'12' '1' '2'
'45' '4' '5'