Python | 正規表現 × 生文字列(raw string)

Python
スポンサーリンク

10. 模範解答と解説

問題①

re.findall(r"\d{3}", "abc123xyz4567")
Python

✅ 模範解答:

import re
result = re.findall(r"\d{3}", "abc123xyz4567")
print(result)  # ['123', '456']
Python

💡 解説:

  • \d は「数字(0〜9)」を意味します。
  • {3} は「3文字連続」という指定です。
  • つまり \d{3} は「3桁の数字」を探す正規表現です。
  • 文字列 "abc123xyz4567" の中では、
    • 123(3桁)
    • 456(3桁)
      がマッチします。
  • 最後の 7 は1桁だけなので無視されます。

👉 ポイント
普通の文字列だと "\\d{3}" と書かないといけません。
raw 文字列(r"...")を使うことで、"\d{3}" と書いても
\ をそのまま「バックスラッシュ」として扱ってくれます。
見やすくてミスが減ります!


問題②

ログに記録された C:\tmp\log.txt を正規表現で検出したい。
re.search() に渡すパターンを r"..." を使って書いてください。

✅ 模範解答:

import re
text = "Error at C:\\tmp\\log.txt line 12"
pattern = r"C:\\tmp\\log\.txt"

match = re.search(pattern, text)
if match:
    print("見つかりました!:", match.group())
Python

💡 解説:

  • Windows のパスにはバックスラッシュ(\)が含まれます。
    正規表現の中では \ 自体が特別な意味を持つので、
    そのまま書くと混乱します。
  • 例えば普通の文字列 "C:\\tmp\\log\\.txt"
    バックスラッシュが二重になって見づらいです。
  • そこで 生文字列 r"..." を使うと:
r"C:\\tmp\\log\.txt"
Python

のように簡潔に書けます。

  • \\ → 実際の「\」を表す
  • \. → 「ドットそのもの」を表す(. は通常は「任意の1文字」を意味するため)

👉 ポイント
Windows パスや正規表現のように \ を多用する場面では
raw 文字列を使うのが鉄則です。


問題③

re.VERBOSE を使って、YYYY-MM-DD の形式を読みやすく書き、
"2025-11-02" でマッチするか確認してください。

✅ 模範解答:

import re

pattern = re.compile(r"""
    ^              # 文字列の先頭
    (\d{4})        # 年(4桁の数字)
    -              # ハイフン
    (0[1-9]|1[0-2])# 月(01〜12)
    -              # ハイフン
    (0[1-9]|[12]\d|3[01]) # 日(01〜31)
    $              # 文字列の末尾
""", re.VERBOSE)

text = "2025-11-02"

match = pattern.match(text)
if match:
    print("日付として正しい形式です!:", match.group())
else:
    print("マッチしません。")
Python

💡 解説:

  • re.VERBOSE オプションを使うと、
    正規表現の中に「改行」や「コメント(#)」を入れてもOKになります。
  • 長い正規表現を見やすく整形できるのが最大の利点。
  • ここでは:
    • ^$ … 文字列の先頭と末尾を指定(全体一致)
    • \d{4} … 年(4桁)
    • 0[1-9]|1[0-2] … 月(01〜12)
    • 0[1-9]|[12]\d|3[01] … 日(01〜31)
  • r"""...""" と三重引用+raw 文字列を使うことで
    バックスラッシュを維持しつつ、複数行で読みやすく記述できます。

👉 ポイント
正規表現が長くなると「何をしているかわからなくなる」ので、
r"""...""" + re.VERBOSE の組み合わせが非常に便利です!


まとめ

用途raw 文字列を使うメリット
パス文字列 (C:\folder)バックスラッシュが簡潔に書ける
正規表現パターン\d, \b, \s などが見やすい
長いパターン(re.VERBOSE)三重引用符と組み合わせて読みやすく書ける
バグ防止「\n」や「\t」などが誤って特殊文字にならない
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました