Python | 正規表現での raw文字列利用

Python
スポンサーリンク

では 正規表現(Regex)での raw文字列利用 を初心者向けにやさしく解説し、例題も交えて詳しく説明します。


正規表現とは?

正規表現(Regex)は、「文字列のパターンを指定して検索・抽出・置換する方法」です。

例:

import re

text = "電話番号は090-1234-5678です"
pattern = r"\d{3}-\d{4}-\d{4}"
result = re.findall(pattern, text)
print(result)
Python

出力:

['090-1234-5678']
  • \d → 数字を意味します(0~9)
  • {3} → 直前の文字が3回連続
  • - → ハイフン
  • raw文字列 r"..." を使うことで、\d がそのまま「数字の意味」として解釈されます。

raw文字列が必要な理由

正規表現には \ がたくさん出てきます:

  • \d → 数字
  • \w → 英数字またはアンダースコア
  • \s → 空白文字
  • \b → 単語の境界

もし raw文字列を使わないと…

pattern = "\\d{3}-\\d{4}-\\d{4}"
Python
  • \d を出すために \\d と二重に書かなければなりません。
  • 見にくく、間違いやすいです。

raw文字列を使うと、シンプルに書けます:

pattern = r"\d{3}-\d{4}-\d{4}"
Python
  • \ をそのまま書ける
  • 読みやすく、ミスも減ります

例題1:数字だけ抽出

import re

text = "私の電話は080-1234-5678で、友達の電話は070-9876-5432です"
pattern = r"\d{3}-\d{4}-\d{4}"

numbers = re.findall(pattern, text)
print(numbers)
Python

出力:

['080-1234-5678', '070-9876-5432']

解説:

  • \d{3} → 3桁の数字
  • \d{4} → 4桁の数字
  • ハイフンはそのまま
  • raw文字列なので \d を二重に書く必要なし

例題2:単語を抽出(空白で区切る)

text = "Pythonは楽しい 言語です"
pattern = r"\b\w+\b"

words = re.findall(pattern, text)
print(words)
Python

出力:

['Python', 'は', '楽しい', '言語', 'です']
  • \b → 単語の境界
  • \w+ → 1文字以上の英数字や日本語など(PythonではUnicode対応)
  • raw文字列を使うことで、\b\w を正しく解釈させています

ポイントまとめ

  1. 正規表現には \ が多く出てくる
  2. 通常文字列で書くと \\d のように二重になりややこしい
  3. raw文字列 r"..." を使うと、\ をそのまま書けてスッキリ
  4. ファイルパスや正規表現では raw文字列が特に便利

練習問題

  1. 文章からメールアドレスを抽出する正規表現を書こう
  2. 文章から数字だけを抽出し、リストにする
  3. 文の先頭の単語だけを抽出する

すべて raw文字列を使って書くと、\ の扱いが簡単になります。


解答・解説

問題1:文章からメールアドレスを抽出

次の文章から、メールアドレスをすべて抽出してください。

import re

text = "連絡は info@example.com または support@python.org までお願いします。"
# ここに正規表現パターンを書いて、re.findall() を使う
pattern = r"..."  # ここを完成させる
emails = re.findall(pattern, text)
print(emails)
Python

解答例

pattern = r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
emails = re.findall(pattern, text)
print(emails)
Python

出力:

['info@example.com', 'support@python.org']

解説

  • [a-zA-Z0-9_.+-]+ → メールのユーザー名部分(英数字・記号1文字以上)
  • @ → 「@」そのもの
  • [a-zA-Z0-9-]+ → ドメイン名
  • \. → ドット(raw文字列なので \. でOK)
  • [a-zA-Z0-9-.]+ → ドメインの最後の部分
  • raw文字列を使うことで、\. のようなバックスラッシュを二重に書く必要がなく、見やすい

問題2:文章から数字だけを抽出

import re

text = "私は今年30歳で、弟は12歳です。"
# 数字だけを抽出する正規表現を書こう
pattern = r"..."  # ここを完成させる
numbers = re.findall(pattern, text)
print(numbers)
Python

解答例

pattern = r"\d+"
numbers = re.findall(pattern, text)
print(numbers)
Python

出力:

['30', '12']

解説

  • \d → 数字1文字
  • + → 1文字以上
  • raw文字列 r"\d+" にすることで、\d をそのまま使える

問題3:文の先頭の単語だけを抽出

import re

text = "Pythonは楽しい言語です。"
# 文の先頭の単語だけを抽出
pattern = r"..."  # ここを完成させる
first_word = re.findall(pattern, text)
print(first_word)
Python

解答例

pattern = r"^\w+"
first_word = re.findall(pattern, text)
print(first_word)
Python

出力:

['Python']

解説

  • ^ → 文字列の先頭
  • \w+ → 1文字以上の英数字または日本語文字
  • raw文字列 r"^\w+" で書くことで、\w がそのまま「単語文字」として扱える
  • 文頭の単語だけ抽出できる

ポイントまとめ

  1. 正規表現では \ が多く出てくる
  2. raw文字列 r"..." を使うと、\ をそのまま書ける
  3. 見やすく、間違いも少なくなる
  4. 数字抽出やメールアドレス抽出など、文字列処理でよく使う
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました