1. はじめに
Pythonには文字列を扱う上で非常に強力な機能である「正規表現によるパターンマッチ」が用意されています。
この記事では、Python|文字列のパターンマッチ(正規表現)というテーマのもと、正規表現の基本から応用までを具体的なコードとともにわかりやすく解説していきます。
「特定の形式の文字列を抽出したい」「入力値がルールに合っているか確認したい」といった実務でよくある処理も、正規表現を使えば簡単に実装可能です。
本記事を読むことで、Pythonのreモジュールを使った文字列検索や抽出のスキルが身につき、実務でも役立つスクリプトが書けるようになります。
2. Pythonの正規表現(reモジュール)の基本
2-1. 正規表現とは?
正規表現(Regular Expression)は、文字列のパターンを定義するための特別な記法です。
Pythonではreモジュールを使うことで、正規表現によるパターンマッチが可能になります。
2-2. reモジュールの基本的な使い方
正規表現を扱う基本的な関数には以下のようなものがあります。
re.search()
:文字列全体から最初にマッチした部分を探すre.match()
:文字列の先頭がパターンに一致するか判定re.findall()
:文字列内の全マッチをリストで返す
2-3. 基本的な使用例
import re
text = "今日は2025年7月8日です。"
# 年のパターンを検索
match = re.search(r"\d{4}年", text)
if match:
print("見つかった文字列:", match.group())
実行結果:
見つかった文字列: 2025年
\d
は数字を意味し、{4}
で4桁の数字を指定しています。
このようにパターンを組み合わせることで、柔軟な検索が可能になります。
3. よくある使い方・応用例
3-1. メールアドレスの形式チェック
import re
email = "user@example.com"
# メールアドレスの正規表現パターン
pattern = r"^[\w\.-]+@[\w\.-]+\.\w+$"
if re.match(pattern, email):
print("正しいメールアドレス形式です。")
else:
print("不正な形式です。")
実行結果:
正しいメールアドレス形式です。
3-2. 電話番号から数字だけを抽出
import re
tel = "TEL: 03-1234-5678"
numbers = re.findall(r"\d+", tel)
print("数字だけ抽出:", numbers)
実行結果:
数字だけ抽出: ['03', '1234', '5678']
3-3. テキストからURLを抽出
import re
text = "公式サイトはこちら:https://www.example.com です。"
urls = re.findall(r"https?://[^\s]+", text)
print("URL抽出:", urls)
実行結果:
URL抽出: ['https://www.example.com']
4. 注意点・エラー対策
4-1. マッチしなかった場合の扱い
re.search()
やre.match()
は、マッチしない場合None
を返します。
そのまま.group()
を呼ぶとAttributeError
になるため、事前にif match:
のようにチェックしましょう。
4-2. 特殊文字のエスケープ
正規表現では .
や *
、 +
などの記号が特別な意味を持ちます。
例えば「.com」を文字通り検索したい場合は \.com
のようにバックスラッシュでエスケープが必要です。
4-3. Unicodeや日本語の扱い
Pythonの正規表現では日本語も扱えますが、文字コードの違いや全角文字に注意しましょう。
必要に応じてre.UNICODE
オプションを使うことで挙動が安定します。
5. まとめ
- Pythonのreモジュールを使えば、文字列内から特定のパターンを簡単に検索・抽出できる
- search, match, findallなどの関数は使い分けが重要
- メールアドレス・電話番号・URLの抽出など実務でも非常に役立つ
- 初心者がハマりがちな
Noneチェック
やエスケープ処理
に注意すること
正規表現は初見だと少し難しく感じるかもしれませんが、「少しずつ覚えて、よく使うパターンをストックしていく」のが上達のコツです。
ぜひ実務や趣味の自動化スクリプトなどにも活用してみてください!