re.match / re.search / re.fullmatch / re.findall の違い

テクニック

Python の正規表現は、似たような関数がいくつもあります。
ここではよく使う4つの関数の違いを整理しておきましょう。


1. re.match

「文字列の先頭でマッチするか?」 を確認します。

import re
text = "Endpoint: U5/D"

print(re.match(r"Endpoint", text))   # ✅ マッチ(先頭が 'Endpoint')
print(re.match(r"U5", text))         # ❌ None(先頭は 'Endpoint')

👉 必ず先頭にあるかどうかだけを調べます。
ログやレポートの「行頭のキーワード」を拾うのに便利です。


2. re.search

「文字列のどこかにマッチするか?」 を確認します。

text = "Endpoint: U5/D"

print(re.search(r"Endpoint", text))  # ✅ 先頭にあるのでマッチ
print(re.search(r"U5", text))        # ✅ 中間にあるのでマッチ

👉 行の途中に出てくる文字列も探せるのが re.search
パターンが文字列のどこにあるかわからない時はこちらを使います。


3. re.fullmatch

「文字列全体がパターンと一致するか?」 を確認します。

text = "Endpoint: U5/D"

print(re.fullmatch(r"Endpoint: U5/D", text))  # ✅ 全体一致
print(re.fullmatch(r"Endpoint", text))        # ❌ 部分一致はNG

👉 「1行丸ごとがこの形式か?」を確認したいときに使います。
(例:数値だけの行を検出する、日付フォーマットを検証する 等)


4. re.findall

「パターンに一致した部分をすべてリストで返す」

text = "slack = 0.11 ns, slack = -0.05 ns"

print(re.findall(r"-?\d+\.\d+", text))
# 👉 ['0.11', '-0.05']

👉 「数値を全部抜き出したい」「メールアドレスを一括抽出したい」などに便利です。


5. まとめ表

関数どこを調べる?戻り値
re.match文字列の 先頭最初にマッチした部分 or None
re.search文字列の どこか最初にマッチした部分 or None
re.fullmatch文字列 全体一致した部分 or None
re.findall文字列の 全部から複数一致一致部分のリスト

6. 使い分けの目安

  • 行頭のキーワード検出re.match
  • 行中の任意位置で検索re.search
  • 入力全体がルール通りか確認re.fullmatch
  • 複数の値を一括抽出re.findall

💡 ポイント

  • re.match は「行頭専用」、re.search は「どこでも探す」
  • re.fullmatch は「全体一致かどうか」
  • re.findall は「全部抜き出し」。

この4つを覚えれば、Timing Report の解析はもちろん、ログ解析やフォーマット検証など幅広く応用できます!
また、これらの動作は、都度compileするため、巨大なファイルを扱う場合は動作が遅くなりがちです。改善には、この記事を参照してみてください!

テクニック
スポンサーリンク
この記事を書いた人

運営者について

当サイトは、個人が運営する学習・記録ブログです。

AI・データサイエンス・自動化を中心に、
Python、G検定・DS検定の学習内容や、
実際に試しながら整理した知識をまとめています。

特定の企業や団体に属さない個人サイトとして、
学習過程で得た気づきや判断の整理を目的に運営しています。

「知識はあるが、どう使えばよいか分からない」
「情報が多く、判断に迷ってしまう」
といった状態を減らすことを目的に発信しています。

専門家として教える立場ではなく、
自分自身がつまずき、試し、整理してきた過程をそのまま共有するスタイルです。

用語の暗記やテクニックの紹介よりも、
・なぜそう考えるのか
・どの順番で判断するのか
・どこで迷いやすいのか
といった思考の整理を重視しています。

学び場をフォローする
学び場をフォローする
タイトルとURLをコピーしました