Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python正規表現のre.finditer()メソッドの使い方を解説

Pythonで文字列から正規表現にマッチするすべての箇所を抽出したい場合、re.finditer()メソッドが便利です。この記事では、その基本的な使い方と動作をわかりやすく解説します。

re.finditer()メソッドとは

Python公式ドキュメントによると、構文は以下の通りです。

re.finditer(pattern, string, flags=0)

re.finditer()は、文字列内から正規表現パターンに一致する重複しないすべてのマッチを検索し、Matchオブジェクトを順番に返すイテレータを返します。

  • 文字列は左から右へ走査され、見つかった順にマッチ結果が返されます
  • 空のマッチも結果に含まれます

似た関数にre.findall()がありますが、こちらはマッチした文字列自体をリストで返すのに対し、re.finditer()はMatchオブジェクトを返すため、マッチ位置(開始・終了インデックス)などの詳細情報を取得できます。

使用例

以下のコードは、Pythonの正規表現でre.finditer()を使用する例です。ここでは、文字列'Blue Berries'の中からパターン'Blue Berries'に一致する箇所と、その開始位置・終了位置を出力しています。

import re

s1 = 'Blue Berries'
pattern = 'Blue Berries'

for match in re.finditer(pattern, s1):
    s = match.start()
    e = match.end()
    print(f'文字列は "%s" が %d:%d の位置でマッチしました' % (s1[s:e], s, e))

実行結果

文字列は "Blue Berries" が 0:12 の位置でマッチしました

ポイント解説

  • match.start(): マッチした部分の開始インデックスを返します(上の例では0)
  • match.end(): マッチした部分の終了インデックス+1を返します(上の例では12)
  • s1[s:e]: スライスを使って実際にマッチした文字列を取り出しています

re.finditer()は大量のテキストを扱う場合にもメモリ効率が良く、ログ解析やデータ抽出などの場面で活躍するメソッドです。

  1. Pythonの正規表現で単語以外の文字をマッチさせる方法

    正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に

  2. 【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法

    次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ