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

Python
スポンサーリンク

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. 長文からメールアドレスをすべて取り出してリストにするコードを書いてみよう。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました