
Pythonでプログラミングをしていると、文字列の中にバックスラッシュ(\)が含まれる場面に遭遇することがあります。
そんなときに便利なのが「raw文字列」という記法です。
r"..." という書き方で表される raw文字列 は、バックスラッシュをエスケープ文字として解釈せず、文字通りそのまま扱うための仕組みです。
この記事では raw文字列の基本的な使い方から、実際の活用シーン、注意点までをわかりやすく丁寧に解説します。
raw文字列とは?
raw文字列は、Pythonにおける 文字列リテラルの特殊な記法 のひとつです。
通常の文字列では、バックスラッシュ(\)は改行文字 \n やタブ文字 \t などのエスケープシーケンスとして解釈されます。
しかし、 raw文字列では、バックスラッシュもそのまま文字として扱われます。
raw文字列は、文字列の前に r または R を付けて記述します。
1 2 3 4 5 6 7 8 9 10 |
# 通常の文字列 normal_string = "C:\new\test" print(normal_string) # C: ew est (\n と \t が解釈されて改行等に変換されてしまう) # raw文字列 raw_string = r"C:\new\test" print(raw_string) # C:\new\test (そのまま表示) |
具体例① :Windowsのファイルパス
raw文字列の最も典型的な使用例が、Windowsのファイルパス指定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 通常の文字列でファイルパスを書くと... file_path = "C:\Users\username\Documents\new_file.txt" print(file_path) # C:Users\username\Documents ew_file.txt (\nが解釈されて改行に変換されてしまう) # raw文字列を使うと正しく表示される file_path = r"C:\Users\username\Documents\new_file.txt" print(file_path) # C:\Users\username\Documents\new_file.txt # ファイル操作でも活用 with open(r"C:\temp\data.txt", "r") as f: content = f.read() |
このように:
- 通常の文字列では \n や \t がエスケープシーケンスとして解釈されてしまう
- raw文字列を使うことで、パス区切り文字のバックスラッシュをそのまま使える
- ファイル操作の際にも、パス指定が簡単になる
具体例②:正規表現パターン
raw文字列は正規表現を書くときにも非常に便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import re # 通常の文字列で正規表現を書くと、バックスラッシュが二重に必要 pattern1 = "\\d+\\.\\d+" # 数字.数字のパターン result1 = re.findall(pattern1, "価格: 1500.50円") # raw文字列を使うとスッキリ書ける pattern2 = r"\d+\.\d+" # 同じパターンをraw文字列で result2 = re.findall(pattern2, "価格: 1500.50円") print(result1) # ['1500.50'] print(result2) # ['1500.50'] (同じ結果) # 複雑な正規表現でもraw文字列が威力を発揮 email_pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" emails = re.findall(email_pattern, "連絡先: user@example.com, admin@test.co.jp") |
正規表現では:
\d
(数字)、\w
(文字)、\.
(リテラルのドット)など、バックスラッシュを多用する- 通常の文字列だと
\\d
のように二重にエスケープが必要 - raw文字列なら
\d
とそのまま書ける
raw文字列で使える様々な記法
raw文字列は、以下のような形式で記述できます。
記法 | 例 | 説明 |
---|---|---|
r"..." | r"Hello\World" | 基本的なraw文字列 |
R"..." | R"Hello\World" | rの大文字版(同じ意味) |
r'...' | r'Hello\World' | シングルクォートでも可 |
r"""...""" | r"""複数行の<br>raw文字列""" | 複数行のraw文字列 |
r'''...''' | r'''複数行の<br>raw文字列''' | 複数行(シングル版) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 複数行のraw文字列の例 sql_query = r""" SELECT * FROM users WHERE name LIKE '%\_%' -- アンダースコアを含む名前 """ regex_pattern = r''' \d{4}-\d{2}-\d{2} # YYYY-MM-DD形式の日付 \s+ # 空白文字 \d{2}:\d{2} # HH:MM形式の時刻 '''</code><code class="language-python"> |
raw文字列を使うときの注意点
末尾にバックスラッシュは置けない
raw文字列の末尾にバックスラッシュを置くと、シンタックスエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# これはエラー # path = r"C:\Users\username\" # 回避方法1:通常の文字列と連結 path = r"C:\Users\username" + "\\" # 回避方法2:os.path.sepを使う import os path = r"C:\Users\username" + os.path.sep # 回避方法3:os.path.joinを使う(推奨) import os path = os.path.join(r"C:\Users", "username") # 末尾にディレクトリ区切りが自動追加される |
raw文字列でもクォート文字に注意
raw文字列の中でも、使用しているクォート文字と同じ文字は適切にエスケープするか、異なるクォート文字を使う必要があります。
1 2 3 4 5 6 7 8 |
# ダブルクォートを含む場合 text1 = r'彼は"Hello"と言った' # シングルクォートで囲む text2 = r"彼は\"Hello\"と言った" # エスケープ(raw文字列でも必要) # シングルクォートを含む場合 text3 = r"It's a pen" # ダブルクォートで囲む text4 = r'It\'s a pen' # エスケープ |
まとめ
今回はPythonのraw文字列について詳しく解説しました。
- raw文字列は r"..." の記法で、バックスラッシュをエスケープ文字として解釈しない
- Windowsのファイルパス、正規表現などで特に威力を発揮
- 通常の文字列とraw文字列を使い分けることで、コードが読みやすくなる
- 末尾のバックスラッシュやクォート文字の扱いには注意が必要
raw文字列をマスターすることで、ファイル操作や文字列処理、正規表現など、様々な場面で読みやすく保守しやすいコードを書けるようになります。
特にWindowsでの開発や、正規表現を多用する処理では必須のテクニックなので、ぜひしっかりと理解しておきましょう!