【Python】正規表現のマッチ位置と内容を取得する:Matchオブジェクトのメソッド一覧

Pythonの re モジュールで re.search()re.match() を実行すると、マッチが成功した場合に Match オブジェクトが返されます。このオブジェクトは、単に「マッチしたかどうか」だけでなく、「どこにマッチしたか」「具体的にどの文字列がマッチしたか」という詳細な情報を保持しています。

ここでは、Match オブジェクトから情報を引き出すための主要なメソッドと、その具体的なコード例を解説します。

目次

Matchオブジェクトの主要メソッド

マッチした結果に対して以下のメソッドを使用することで、開始位置や終了位置、キャプチャしたグループの内容などを取得できます。

メソッド戻り値の型説明
group()strマッチした文字列全体(または指定したグループ)を返します。
groups()tupleパターン内にグループ () がある場合、全てのグループのマッチ文字列をタプルで返します。
start()intマッチした文字列の開始インデックスを返します。
end()intマッチした文字列の終了インデックスを返します。
span()tupleマッチした文字列の (開始位置, 終了位置) のタプルを返します。

実装例:製品コードの抽出と位置特定

テキストデータの中から、特定のフォーマット(例:英字4文字-数字4桁)を持つ製品コードを検索し、その詳細情報を取得する例を紹介します。

ソースコード

import re

# 解析対象のテキスト
text = "New product released: PROD-2025 is available now."

# 正規表現パターン
# (PROD) と (\d{4}) の2つのグループを定義しています
pattern = r"(PROD)-(\d{4})"

# 正規表現検索を実行
m_obj = re.search(pattern, text)

if m_obj:
    # 1. マッチした文字列全体を取得
    print(f"Match content : {m_obj.group()}")
    
    # 2. マッチした位置情報を取得
    print(f"Start index   : {m_obj.start()}")
    print(f"End index     : {m_obj.end()}")
    print(f"Span tuple    : {m_obj.span()}")
    
    # 3. グループごとの文字列を取得
    # groups() はすべてのグループをタプルで返します
    print(f"Groups        : {m_obj.groups()}")
    
    # group(n) で個別のグループを取得(1始まり)
    print(f"Group 1 (Code): {m_obj.group(1)}")
    print(f"Group 2 (Year): {m_obj.group(2)}")
else:
    print("No match found.")

実行結果

Plaintext

Match content : PROD-2025
Start index   : 22
End index     : 31
Span tuple    : (22, 31)
Groups        : ('PROD', '2025')
Group 1 (Code): PROD
Group 2 (Year): 2025

解説

位置情報の取得

  • start()end() を使用することで、元の文字列のどこにパターンが存在するかを正確に特定できます。これは、ハイライト表示や文字列の置換処理を独自に行う際に役立ちます。
  • span()(start(), end()) と等価なタプルを返すため、スライス操作(例:text[s:e])を行う際に便利です。

グループの取得

  • group() は引数を省略(または0を指定)すると、マッチした全体を返します。
  • groups() は定義されたサブグループ(丸括弧で囲まれた部分)のみを抽出するため、構造化されたデータのパースに適しています。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次