Pythonでの正規表現 × 生文字列(raw string)入門
では、プログラミング初心者向けに、正規表現 × 生文字列(raw string) の使い方を、
「しくみの理解 → 実例コード → 出力 → 解説」までセットでまとめます。
Python学習者がそのままコピペして試せる構成にしました。
1. なぜ「raw 文字列」が必要なの?
Pythonでは、バックスラッシュ \ に特別な意味(エスケープ)があるからです。
たとえば:
print("C:\new_folder\data.txt")
Python実行すると、
C:
ew_folder\data.txt
😱 \n が「改行」に変わってしまいました!
そこで登場「raw 文字列」
文字列の前に r をつけると、
Pythonはバックスラッシュを“そのままの文字”として扱います。
print(r"C:\new_folder\data.txt")
Python出力:
C:\new_folder\data.txt
これが raw string(生文字列)。
つまり「r を付けると、\ を普通の文字として扱う」しくみです。
2. 正規表現とバックスラッシュの関係
正規表現(re モジュール)でも \ を多用します。
例:
\d→ 数字(digit)\s→ 空白(space)\b→ 単語の区切り(boundary)
なので、普通の文字列だとバックスラッシュが2重に必要になります。
❌ 普通の文字列(読みにくい)
import re
re.findall("\\d+", "abc123xyz456") # バックスラッシュ2つ
Python✅ raw文字列(読みやすい)
re.findall(r"\d+", "abc123xyz456")
Python出力:
['123', '456']
3. 実例①:数字だけを抜き出す
import re
text = "注文番号1234、合計金額56789円です。"
pattern = r"\d+" # 1個以上の数字にマッチ
print(re.findall(pattern, text))
Python出力:
['1234', '56789']
📘 解説:
\dは数字、+は「1文字以上の繰り返し」- つまり「1つ以上続く数字」をすべてリストで返します
rを付けることで、\dが “そのまま正規表現” として動作します
4. 実例②:メールアドレスを抜き出す
import re
text = "連絡先は test_user@example.com です。"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
result = re.findall(pattern, text)
print(result)
Python出力:
['test_user@example.com']
📘 解説:
[...]は文字の集合、「この中のどれか1文字」+は「1文字以上」@や.など、正規表現では特別な記号も混ざるので、
普通の文字列だと\\.のように2重に書かなければならない。- でも
r"..."を使えば\.のままでOK。
5. 実例③:Windowsパスをログから検索
import re
log = "File saved to C:\\data\\results\\output.txt at 10:00"
pattern = r"C:\\data\\results\\output\.txt"
match = re.search(pattern, log)
print(bool(match))
Python出力:
True
📘 解説:
\\→ 実際の1つの\\.→ ドットを「任意の文字」ではなく「. そのもの」として扱うr"..."にすることで、見た目と実際が一致してわかりやすい。
6. 実例④:複雑な正規表現をきれいに書く(re.VERBOSE)
import re
pattern = re.compile(r"""
^ # 文字列の先頭
([A-Z][a-z]+) # 姓:最初が大文字、その後小文字
\s+ # 空白
([A-Z][a-z]+) # 名:同じく
$ # 文字列の末尾
""", re.VERBOSE)
m = pattern.match("Smith John")
print(m.groups())
Python出力:
('Smith', 'John')
📘 解説:
re.VERBOSEモードでは、改行やコメント#が使える。r"""..."""のように raw + 三重引用符 で、可読性が劇的に上がる。- 実務では「複雑な正規表現パターン」を定義するのに必須テクです。
7. 注意点:raw文字列の制限
raw文字列は「最後が \ のまま」だとエラーになります。
r"C:\path\" # ❌ SyntaxError
Python🩹 対処法:
r"C:\path\\" # ✅ 末尾を2つにする
"C:\\path\\" # ✅ 普通の文字列で書く
8. まとめ
| 目的 | 書き方 | 意味 |
|---|---|---|
| 改行・タブなどを避けてそのまま書きたい | r"..." | バックスラッシュを特別扱いしない |
正規表現で \d, \s, \b などをそのまま使いたい | r"\d+" | エスケープの重複を防ぐ |
| 長いパターンを読みやすく書きたい | re.compile(r"""...""", re.VERBOSE) | コメント付きで書ける |
末尾に \ を置きたい | "C:\\path\\" | rawではなく普通の文字列でOK |
9. 練習問題(理解チェック)
1. 「abc123xyz456」から数字だけを取り出す正規表現を書こう。
(raw文字列を使って)
2. 「sample_01.txt」や「data_99.txt」のようなファイル名にマッチする正規表現を r"..." 形式で書いてみよう。
3. 長文からメールアドレスをすべて取り出してリストにするコードを書いてみよう。
