ここでは、Pythonでよく使う 正規表現テンプレート集(raw文字列対応版) を、
初心者でも読めるように整理して紹介します。
それぞれ 実例コード付き・動作確認OK の形にしてあります。
どれも r"..."(生文字列)を使うのがポイントです。
1️⃣ メールアドレス
import re
pattern = re.compile(
r"^[\w\.-]+@[\w\.-]+\.\w+$"
)
test = "info.example-123@mail.co.jp"
print(bool(pattern.match(test))) # True
Python💡 解説:
[\w\.-]+… 英数字・「_」「.」「-」を含む文字列@… メールの区切り\.\w+… ドット+英数字(例:.com,.jp)- シンプル版。RFC準拠でなくても実務でよく使われます。
2️⃣ 電話番号(日本形式)
import re
pattern = re.compile(
r"^0\d{1,4}-\d{1,4}-\d{4}$"
)
tests = ["03-1234-5678", "090-1234-5678", "052-12-3456"]
for t in tests:
print(t, "→", bool(pattern.match(t)))
Python💡 解説:
0\d{1,4}… 先頭が 0 で始まり、1〜4桁の市外局番など-… ハイフン区切り- 最後は
\d{4}… 固定4桁の番号 - 携帯 (
090-系)・固定電話 (03-系) の両方に対応。
3️⃣ 日付(YYYY-MM-DD)
import re
pattern = re.compile(
r"^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$"
)
tests = ["2025-11-02", "2025-2-5", "1999-12-31"]
for t in tests:
print(t, "→", bool(pattern.match(t)))
Python💡 解説:
\d{4}… 4桁の西暦0[1-9]|1[0-2]… 月(01〜12)0[1-9]|[12]\d|3[01]… 日(01〜31)"2025-11-02"のような ゼロ埋め形式限定。
4️⃣ URL(http/https 対応)
import re
pattern = re.compile(
r"^https?://[\w.-]+(?:\.[\w.-]+)+[/\w\-.?=&%]*$"
)
tests = [
"https://www.example.com",
"http://test-site.jp/path/page?x=1",
"ftp://invalid.com"
]
for t in tests:
print(t, "→", bool(pattern.match(t)))
Python💡 解説:
https?://… http または https[\w.-]+… ドメイン部分(?:\.[\w.-]+)+… ドット区切り(サブドメインなど)- 最後の
[/\w\-.?=&%]*… 任意のパスやクエリ文字列 - RFC完全準拠ではありませんが、Web開発で十分実用レベル。
5️⃣ 郵便番号(日本形式)
import re
pattern = re.compile(r"^\d{3}-\d{4}$")
tests = ["123-4567", "12-34567", "1234567"]
for t in tests:
print(t, "→", bool(pattern.match(t)))
Python💡 解説:
\d{3}… 3桁-… ハイフン\d{4}… 4桁- 「123-4567」のような形式を判定します。
6️⃣ IPv4 アドレス
import re
pattern = re.compile(
r"^(?:\d{1,3}\.){3}\d{1,3}$"
)
tests = ["192.168.0.1", "8.8.8.8", "256.100.10.5"]
for t in tests:
print(t, "→", bool(pattern.match(t)))
Python💡 解説:
(?: ... ){3}は「このパターンを3回繰り返す」\d{1,3}は数字1〜3桁- 形式だけチェック。値が255を超えてもTrueになります。
→ 厳密チェックしたい場合は数値変換を併用します。
7️⃣ 半角英数字のみチェック
import re
pattern = re.compile(r"^[A-Za-z0-9]+$")
print(bool(pattern.match("Hello123"))) # True
print(bool(pattern.match("こんにちは"))) # False
Python💡 解説:
A-Za-z0-9… 英小文字・英大文字・数字- 日本語や記号が含まれていたらマッチしません。
8️⃣ 空白や改行を除いた文字列(トリミング)
import re
text = " Hello world! \n"
result = re.sub(r"^\s+|\s+$", "", text)
print(f"'{result}'") # 'Hello world!'
Python💡 解説:
^\s+… 行頭の空白を削除\s+$… 行末の空白を削除|で両方をまとめて指定。
まとめ:実務での使い分け
| 用途 | パターン例 | 補足 |
|---|---|---|
| メール | r"^[\w\.-]+@[\w\.-]+\.\w+$" | シンプル&実用的 |
| 電話 | r"^0\d{1,4}-\d{1,4}-\d{4}$" | 国内電話 |
| 日付 | `r”^\d{4}-(0[1-9] | 1[0-2])-(0[1-9] |
| URL | r"^https?://[\w.-]+(?:\.[\w.-]+)+[/\w\-.?=&%]*$" | Web用 |
| 郵便番号 | r"^\d{3}-\d{4}$" | 日本の形式 |
| IPv4 | r"^(?:\d{1,3}\.){3}\d{1,3}$" | 構文のみ |
| 半角英数字 | r"^[A-Za-z0-9]+$" | パスワード初期チェックなど |
