Python | re.VERBOSE を使った正規表現の書き方練習問題

Python
スポンサーリンク

ここでは Python の re.VERBOSE を使った正規表現 の書き方を練習できる、空欄補充形式の問題集模範解答+解説 を作ります。


練習問題:re.VERBOSE 書き方

問題 1:メールアドレス

空欄を埋めて、re.VERBOSE 形式でメールアドレスのパターンを完成させましょう。

import re

pattern = re.compile(r"""
    ^                       # 文字列の先頭
    [A-Za-z0-9._%+-]+       # _________  ← 空欄1
    @                       # _________  ← 空欄2
    [A-Za-z0-9.-]+          # ドメイン名
    \.                      # _________  ← 空欄3
    [A-Za-z]{2,}            # TLD(例: com, jp)
    $                       # 文字列の終わり
""", re.VERBOSE)
Python

問題 2:電話番号(ハイフン任意)

次の空欄を埋めて、ハイフンあり/なしの電話番号パターンを完成させましょう。

pattern = re.compile(r"""
    ^             # 先頭
    0\d{1,4}      # 市外局番
    -?            # _________ ← 空欄1
    \d{1,4}       # 市内局番
    -?            # _________ ← 空欄2
    \d{3,4}       # 加入者番号
    $             # 終わり
""", re.VERBOSE)
Python

問題 3:日付(YYYY-MM-DD)

re.VERBOSE を使って空欄を完成させ、日付を表す正規表現を作りましょう。

pattern = re.compile(r"""
    ^                 # 先頭
    (19|20)\d{2}      # _________ ← 空欄1(西暦4桁)
    -                 # _________ ← 空欄2(区切り)
    (0[1-9]|1[0-2])   # 月
    -                 # _________ ← 空欄3(区切り)
    (0[1-9]|[12]\d|3[01])  # 日
    $                 # 終わり
""", re.VERBOSE)
Python

模範解答 + 解説

解答 1:メールアドレス

# 空欄1: [A-Za-z0-9._%+-]+   ← ユーザー名部分
# 空欄2: @                    ← 必須の @ 記号
# 空欄3: \.                   ← ドット(.)をエスケープ

💡 解説:

  • [A-Za-z0-9._%+-]+ はメールのユーザー名を表現
  • @ は必須の区切り
  • \. はドット文字を正規表現で使うためにエスケープ

解答 2:電話番号

# 空欄1: -?  ← ハイフンが0回または1回出現
# 空欄2: -?  ← 同上

💡 解説:

  • -? はハイフンがあってもなくてもマッチさせる
  • 0\d{1,4} は市外局番、\d{1,4} は市内局番、\d{3,4} は加入者番号

解答 3:日付

# 空欄1: (19|20)\d{2}  ← 1900〜2099 の西暦4桁
# 空欄2: -              ← 月との区切り
# 空欄3: -              ← 日との区切り

💡 解説:

  • \d{2} は数字2桁
  • (0[1-9]|1[0-2]) は01〜12月
  • (0[1-9]|[12]\d|3[01]) は01〜31日
  • re.VERBOSE で改行やコメントを自由に書ける

練習ポイント

  1. re.VERBOSE ではスペースや改行は無視される → コメントを書ける
  2. 文字をそのままマッチさせたい場合は \ でエスケープ
  3. 繰り返し (+, {2,}) や選択 (a|b) も活用

💡 応用練習案

  • URL 正規表現を re.VERBOSE に書き直す
  • 郵便番号(123-4567)を re.VERBOSE で作る
  • 正規表現の部分ごとにコメントを追加して読みやすくする
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました