Pythonはその豊富な標準ライブラリとサードパーティ製ライブラリで、テキスト処理を非常に強力にサポートしています。特に、正規表現(regex)は、文字列の検索や置換、パターンマッチングを効率的に行うための重要なツールです。本記事では、Pythonで正規表現を使いこなす方法を紹介し、具体的な例とともに解説します。
正規表現とは?
正規表現(Regex)は、文字列のパターンを定義するためのツールで、テキストデータを検索、置換、抽出、バリデーション(検証)する際に非常に便利です。正規表現は多くのプログラミング言語で使用されており、Pythonでも標準ライブラリre
を使って簡単に利用できます。
例えば、電話番号やメールアドレスの形式が正しいかどうかを検証したり、テキストから特定の情報を抜き出したりする際に正規表現が役立ちます。
Pythonで正規表現を使う準備
Pythonで正規表現を使うためには、標準ライブラリであるre
モジュールをインポートする必要があります。これで、正規表現関連の関数を呼び出せるようになります。
import re
基本的な正規表現の使い方
re
モジュールを使うことで、文字列のパターン検索や置換が簡単に行えます。以下では、基本的な正規表現の機能について説明します。
re.search(): パターンを検索する
re.search()
は、文字列内に正規表現パターンが存在するかどうかを検索し、最初にマッチした部分を返します。
import re
text = "今日はいい天気です。"
pattern = r"天気"
match = re.search(pattern, text)
if match:
print(f"見つかった部分: {match.group()}")
else:
print("パターンは見つかりませんでした。")
この例では、"天気"
という単語を探し、見つかればその部分を出力します。
re.match(): 文字列の先頭からマッチするか確認する
re.match()
は文字列の先頭からパターンにマッチするかどうかを確認します。先頭にマッチしない場合、None
が返ります。
import re
text = "今日はいい天気です。"
pattern = r"今日は"
match = re.match(pattern, text)
if match:
print("パターンが先頭にマッチしました。")
else:
print("先頭にはマッチしませんでした。")
re.findall(): パターンにマッチする全ての部分を取得する
re.findall()
は、文字列内の全てのマッチをリストとして返します。
import re
text = "今日はいい天気ですね。明日もいい天気になるといいな。"
pattern = r"天気"
matches = re.findall(pattern, text)
print(matches)
この例では、"天気"
という単語が何回出現するかを調べ、その出現部分をリストで返します。
re.sub(): パターンにマッチした部分を置換する
re.sub()
は、正規表現にマッチした部分を別の文字列に置換します。
import re
text = "今日はいい天気ですね。明日もいい天気になるといいな。"
pattern = r"天気"
replacement = "天候"
result = re.sub(pattern, replacement, text)
print(result)
この例では、"天気"
を全て"天候"
に置き換えた結果を出力します。
正規表現の基本構文
正規表現には多くの特殊な記号や構文があります。ここでは、よく使われる基本的な正規表現のパターンをいくつか紹介します。
.
: 任意の1文字^
: 文字列の先頭$
: 文字列の末尾*
: 直前の文字が0回以上繰り返す+
: 直前の文字が1回以上繰り返す?
: 直前の文字が0回または1回出現[]
: 文字クラス(括弧内のいずれかの文字)|
: 論理OR()
: グループ化
例: メールアドレスの検証
メールアドレスを検証するために、正規表現を使う例です。次のパターンを使って、メールアドレスの形式が正しいかどうかを調べます。
import re
email = "user@example.com"
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
if re.match(pattern, email):
print("有効なメールアドレスです。")
else:
print("無効なメールアドレスです。")
この正規表現は、基本的なメールアドレスの形式(ユーザー名、@、ドメイン名、ドメイン拡張子)にマッチします。
例: 電話番号の検証
次に、電話番号を検証するための正規表現を紹介します。日本の電話番号に対応するパターンです。
import re
phone_number = "090-1234-5678"
pattern = r"^\d{2,4}-\d{2,4}-\d{4}$"
if re.match(pattern, phone_number):
print("有効な電話番号です。")
else:
print("無効な電話番号です。")
この正規表現は、数字とハイフンで構成された電話番号をチェックします。
正規表現の応用例
1. 日付の検証
正規表現を使って、日付の形式(例:YYYY-MM-DD)を検証する方法です。
import re
date = "2024-12-01"
pattern = r"^\d{4}-\d{2}-\d{2}$"
if re.match(pattern, date):
print("有効な日付です。")
else:
print("無効な日付です。")
2. 特定の単語を抽出する
re.findall()
を使って、文章から特定の単語(例えば「天気」)をすべて抽出する方法です。
import re
text = "今日はいい天気ですね。明日もいい天気になるといいな。"
pattern = r"天気"
matches = re.findall(pattern, text)
print(matches)
このコードは、"天気"
が含まれるすべての場所をリストで返します。
正規表現を使う際の注意点
正規表現を使う際にはいくつか注意すべきポイントがあります。
- パフォーマンス: 複雑な正規表現を使うと、処理が遅くなる可能性があります。特に、大量のデータを処理する場合は注意が必要です。
- エスケープ文字: 正規表現の特殊文字(例えば
.
や*
)を文字列として使いたい場合は、エスケープ文字(\\
)を使う必要があります。 - 可読性: 複雑な正規表現は可読性が低くなるため、コメントを付けたり、適切にグループ化したりして、コードの可読性を高めることが重要です。
まとめ
Pythonの正規表現は、テキスト処理を行う上で非常に強力なツールです。正しい構文とテクニックを使うことで、さまざまなタスクを効率よく実行できます。実際にコードを書きながら、正規表現を使ったパターンマッチングや置換処理を習得していきましょう。
コメント