Python正規表現reモジュールの徹底解説:match, search, sub, findallを使いこなす
Pythonで文字列処理を行う際に非常に強力なツールとなるのが正規表現です。中でも標準ライブラリの**reモジュール**は、文字列のパターンマッチング、検索、置換などを柔軟に行うために不可欠です。この記事では、reモジュールの基本的な使い方から、主要な関数であるmatch、search、sub、findallまでを分かりやすく解説します。
reモジュールのインポートと基本的な正規表現の記述
正規表現を使用するには、まずreモジュールをインポートします。正規表現パターンは、通常、生文字列(raw string)として記述します。生文字列は文字列の前にrを付けることで、バックスラッシュ\をエスケープシーケンスとして解釈せずにそのままの文字として扱えるため、正規表現の記述でよく使用されます。
import re
# 生文字列の例
pattern = r"apple"
text = "I like apple and banana."
re.match()とre.search()の違いと使い方
re.match(): 文字列の先頭からのマッチング
re.match()関数は、文字列の先頭が正規表現パターンにマッチするかどうかを判定します。マッチすればマッチオブジェクトを返し、マッチしなければNoneを返します。
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()と異なり、文字列の途中にパターンがあっても検出できます。
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()関数は、正規表現パターンにマッチする部分を別の文字列に置換します。
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引数があり、置換する回数を制限できます。
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()関数は、正規表現パターンにマッチする全ての部分をリストとして取得します。
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モジュールのmatch、search、sub、findallは、Pythonで効率的かつ柔軟に文字列を操作するための基盤となります。これらの関数を理解し使いこなすことで、ログ解析、データ抽出、テキストクリーニングなど、さまざまなタスクを自動化できるようになります。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

