Python正規表現reモジュールの徹底解説:match, search, sub, findallを使いこなす


 

Pythonで文字列処理を行う際に非常に強力なツールとなるのが正規表現です。中でも標準ライブラリの**reモジュール**は、文字列のパターンマッチング、検索、置換などを柔軟に行うために不可欠です。この記事では、reモジュールの基本的な使い方から、主要な関数であるmatchsearchsubfindallまでを分かりやすく解説します。

 

reモジュールのインポートと基本的な正規表現の記述

 

正規表現を使用するには、まずreモジュールをインポートします。正規表現パターンは、通常、生文字列(raw string)として記述します。生文字列は文字列の前にrを付けることで、バックスラッシュ\をエスケープシーケンスとして解釈せずにそのままの文字として扱えるため、正規表現の記述でよく使用されます。

Python
 
import re

# 生文字列の例
pattern = r"apple"
text = "I like apple and banana."

 

re.match()re.search()の違いと使い方

 

 

re.match(): 文字列の先頭からのマッチング

 

re.match()関数は、文字列の先頭が正規表現パターンにマッチするかどうかを判定します。マッチすればマッチオブジェクトを返し、マッチしなければNoneを返します。

Python
 
import re

text = "Hello, Python!"

# 'Hello'は先頭にマッチ
match_obj1 = re.match(r"Hello", text)
print(f"match_obj1: {match_obj1}") # <re.Match object; span=(0, 5), match='Hello'>

# 'Python'は先頭にマッチしない
match_obj2 = re.match(r"Python", text)
print(f"match_obj2: {match_obj2}") # None

 

re.search(): 文字列全体の検索

 

re.search()関数は、文字列全体から正規表現パターンに最初にマッチする箇所を検索します。マッチすればマッチオブジェクトを返し、マッチしなければNoneを返します。match()と異なり、文字列の途中にパターンがあっても検出できます。

Python
 
import re

text = "Hello, Python!"

# 'Hello'は先頭にマッチ
search_obj1 = re.search(r"Hello", text)
print(f"search_obj1: {search_obj1}") # <re.Match object; span=(0, 5), match='Hello'>

# 'Python'は途中にあるがマッチ
search_obj2 = re.search(r"Python", text)
print(f"search_obj2: {search_obj2}") # <re.Match object; span=(7, 13), match='Python'>

 

re.sub(): 文字列の置換

 

re.sub()関数は、正規表現パターンにマッチする部分を別の文字列に置換します。

Python
 
import re

text = "apple, banana, cherry"

# 'apple'を'orange'に置換
new_text = re.sub(r"apple", "orange", text)
print(f"new_text: {new_text}") # orange, banana, cherry

# 数字をハイフンに置換(例: "123-456"を"---"に)
text_num = "電話番号: 090-1234-5678"
new_text_num = re.sub(r"\d", "-", text_num)
print(f"new_text_num: {new_text_num}") # 電話番号: --- ---- ----

 

マッチした回数を制限するcount引数

 

re.sub()にはcount引数があり、置換する回数を制限できます。

Python
 
import re

text = "one two one three one"
# 最初の2つの'one'のみを'XXX'に置換
new_text_count = re.sub(r"one", "XXX", text, count=2)
print(f"new_text_count: {new_text_count}") # XXX XXX one three one

 

re.findall(): 全てのマッチをリストで取得

 

re.findall()関数は、正規表現パターンにマッチする全ての部分をリストとして取得します。

Python
 
import re

text = "apple, banana, cherry, apple pie"

# 全ての'apple'を検索
matches = re.findall(r"apple", text)
print(f"matches: {matches}") # ['apple', 'apple']

# 数字を全て検索
text_numbers = "商品A: 1200円, 商品B: 500円, 商品C: 3000円"
numbers = re.findall(r"\d+", text_numbers)
print(f"numbers: {numbers}") # ['1200', '500', '3000']

 

まとめ

 

reモジュールのmatchsearchsubfindallは、Pythonで効率的かつ柔軟に文字列を操作するための基盤となります。これらの関数を理解し使いこなすことで、ログ解析、データ抽出、テキストクリーニングなど、さまざまなタスクを自動化できるようになります。


 

 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座