reモジュールのfinditerメソッド

モジュール re の finditer メソッドは、 文字列内の 正規表現 に一致する全てのイテレーターを返します。 メソッドの最初のパラメータには正規表現を指定します。 第二パラメータには、正規表現を検索する文字列を指定します。 第三のオプションパラメータでは フラグ を指定できます。 このメソッドは、左から右に向かって全ての一致を検索し、確認します。

構文

pythonimport re

re.finditer(正規表現, 文字列, [フラグ])

例

文字列内の数字を含む全ての部分文字列を見つけてみましょう:

pythontxt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)

print(res)

コード実行結果:

python<callable_iterator object at 0x000002AA891300A0>

例

次に、前の例で取得したオブジェクトを値とする変数 res を宣言し、 それをループで反復処理してみましょう:

pythontxt = 'aaaa 123 bbbb 456'
res = re.finditer('\d+', txt)

for el in res:
  print(el)

コード実行後、2つのMatch objectが得られます:

python<re.Match object; span=(5, 8), match='123'>
<re.Match object; span=(14, 17), match='456'>

これらのオブジェクトには、タプル形式での正規表現との全ての一致に関する情報が含まれています。 インデックスを使用して、一致した部分を抽出できます:

pythonfor el in res:
  print(el[0])

コード実行結果:

python'123'
'456'

例

よりわかりやすくするため、一致を検索する際にグループを使用してみましょう。 そして、ループでオブジェクトを反復処理する際に、最初の一致(これは0番目のグループとみなされます)と、 その要素もそれぞれグループに分けて出力してみましょう:

pythontxt = 'aaaa 123 bbbb 456'
res = re.finditer('(\d)(\d)', txt)

for el in res:
  print(el[0], el[1], el[2])

コード実行後、0番目のグループ(つまり部分文字列全体)と、 その部分文字列の最初と2番目の文字が得られます:

python'12' '1' '2'
'45' '4' '5'

関連項目

  • モジュール re のメソッド findall、
    文字列内の全ての一致のリストを返します
  • モジュール re のメソッド search、
    文字列内で正規表現に最初に一致するものを検索します
  • モジュール re のメソッド match、
    文字列の先頭で正規表現に一致するものを検索します
  • モジュール re のメソッド fullmatch、
    文字列内の正規表現に完全に一致するものを検索します
  • モジュール re のオブジェクト Match object、
    正規表現との一致に関する情報を含みます
  • モジュール re のメソッド split、
    指定された区切り文字で文字列をリストに分割します