ここでは 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で改行やコメントを自由に書ける
練習ポイント
re.VERBOSEではスペースや改行は無視される → コメントを書ける- 文字をそのままマッチさせたい場合は
\でエスケープ - 繰り返し (
+,{2,}) や選択(a|b)も活用
💡 応用練習案
- URL 正規表現を
re.VERBOSEに書き直す - 郵便番号(
123-4567)をre.VERBOSEで作る - 正規表現の部分ごとにコメントを追加して読みやすくする
