Python で正規表現 (Regex) を使用する方法

組み込みの re モジュールを使用して Python 正規表現をマスターします。文字列のマッチング、パターン検索、すべての出現箇所の検索、テキストの置換について学びます。

エディターでこのソリューションを試してください

概要

一般に正規表現として知られる正規表現は、特定のパターンに基づいてテキスト文字列の照合、検索、操作に使用される強力なテンプレートです。 Regex は、電子メール検証、電話番号検証、Web スクレイピング、ログ解析、テキストの検索と置換のタスクに広く使用されています。 Python は、組み込みの「re」モジュールを介して完全な正規表現機能を提供します。

「re」モジュールは、目的に応じていくつかの主要な機能を提供します。 `re.search(pattern, string)` 関数は文字列をスキャンし、最初に出現したパターンの一致オブジェクトを返します。 `re.match(pattern, string)` 関数も似ていますが、文字列の先頭からのみ検索します。テキスト ブロック内のパターンのすべてのインスタンスを取得したい場合、`re.findall(pattern, string)` はそれらを文字列のリストとして返します。

正規表現パターンは、数字の場合は「\d」、英数字の場合は「\w」、1 つ以上の場合は「+」、0 個以上の場合は「*」などの特殊なメタキャラクタを利用します。 Python で正規表現を記述する場合、Python がバックスラッシュをエスケープ シーケンスとして扱うのを防ぐために、生の文字列リテラル (「r"\d+"` のように、「r」というプレフィックスが付いている) を使用するのが標準的な方法です。

コードと実行の出力

このスクリプトは、re モジュールを使用した形式構造の検証、数値トークンの抽出、一致したパターンの置換を示します。

import re

# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"

match = re.search(pattern_port, log_message)
if match:
    print("Found port pattern:", match.group())

# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)

# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)
端子出力
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25

段階的な実装

  • 組み込みの re モジュールをインポートします。
  • エスケープ シーケンスの問題を回避するには、r"\d+" などの生の文字列を使用して正規表現検索パターンを定義します。
  • re.search() を使用して最初の出現箇所を検索するか、 re.findall() を使用して一致する部分文字列をすべて収集します。
  • re.sub(pattern, replace, string) を使用して、テキスト内でパターンベースの置換を実行します。

よくある質問

正規表現パターンに生の文字列 (r"...") を使用する利点は何ですか?

生の文字列は、バックスラッシュをエスケープ文字ではなくリテラル文字として扱います。たとえば、r"\n" はバックスラッシュとそれに続く "n" を表し、"\n" は改行文字を表します。

正規表現の一致が成功したかどうかを確認するにはどうすればよいですか?

re.search() および re.match() は、成功した場合は一致オブジェクトを返し、一致が見つからなかった場合は None を返します。条件ステートメント (例: if match:) を使用して結果を確認する必要があります。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。