Pythonでエスケープシーケンスを無効化するraw文字列の使い方

 

raw文字列の基本

基本的な使い方

# 通常の文字列でのエスケープシーケンス
normal_string = "Hello\nWorld\t!"
print(normal_string)
# Hello
# World    !

# raw文字列でのエスケープシーケンス無効化
raw_string = r"Hello\nWorld\t!"
print(raw_string)  # Hello\nWorld\t!

raw文字列の宣言方法

# r または R プレフィックスを使用
raw1 = r"文字列"
raw2 = R"文字列"  # 大文字でも可

# トリプルクォートとの組み合わせ
raw_multiline = r"""複数行の
raw文字列も
可能です\n\t"""
print(raw_multiline)

実用的な活用例

ファイルパス(Windows)

# 通常の文字列(エラーになる可能性)
# path = "C:\new\text\file.txt"  # \nや\tがエスケープされる

# raw文字列を使用(推奨)
path = r"C:\new\text\file.txt"
print(path)  # C:\new\text\file.txt

# または、スラッシュを使用
path_alt = "C:/new/text/file.txt"
print(path_alt)  # C:/new/text/file.txt

正規表現パターン

import re

# 通常の文字列では\\が必要
pattern1 = "\\d+\\.\\d+"
regex1 = re.compile(pattern1)

# raw文字列なら\1つで済む
pattern2 = r"\d+\.\d+"
regex2 = re.compile(pattern2)

test_string = "価格は123.45円です"
print(regex1.search(test_string).group())  # 123.45
print(regex2.search(test_string).group())  # 123.45

SQLクエリ

# 通常の文字列
sql1 = "SELECT * FROM users WHERE name = 'John\\tDoe'"

# raw文字列(読みやすい)
sql2 = r"SELECT * FROM users WHERE name = 'John\tDoe'"

print("通常:", sql1)
print("Raw:", sql2)

正規表現での活用

複雑な正規表現パターン

import re

text = "電話番号: 03-1234-5678, FAX: 03-9876-5432"

# raw文字列を使った電話番号パターン
phone_pattern = r"\d{2,4}-\d{4}-\d{4}"
phones = re.findall(phone_pattern, text)
print(phones)  # ['03-1234-5678', '03-9876-5432']

# 日本の郵便番号パターン
postal_code = "〒123-4567"
postal_pattern = r"〒\d{3}-\d{4}"
match = re.search(postal_pattern, postal_code)
if match:
    print(f"郵便番号: {match.group()}")

改行を含む正規表現

import re

multiline_text = """行1: データ
行2: 情報
行3: テスト"""

# 行番号と内容を抽出
pattern = r"行(\d+): (.+)"
matches = re.findall(pattern, multiline_text)
print(matches)  # [('1