Pythonの文字列エスケープとraw文字列

Pythonの文字列エスケープを学びます。raw文字列(r文字列)、バイト文字列、f文字列のエスケープ、トリプルクォート文字列、Unicodeエスケープシーケンスを含むPython 3の文字列処理ベストプラクティスを解説します。

Language-Specific

詳細な説明

Pythonの文字列エスケープ

Pythonは豊富な文字列タイプを提供し、それぞれ異なるエスケープ動作を持ちます。これらのオプションを理解することで、あらゆる状況に最適なアプローチを選択できます。

標準エスケープシーケンス

Pythonは通常の文字列で以下のエスケープシーケンスを認識します:

\\'   → シングルクォート
\\"   → ダブルクォート
\\\\   → バックスラッシュ
\\n   → 改行
\\r   → キャリッジリターン
\\t   → タブ
\\b   → バックスペース
\\f   → フォームフィード
\\a   → ベル/アラート
\\0   → null文字
\\ooo → 8進文字(最大3桁)
\\xhh → 16進文字(ちょうど2桁)
\\uxxxx   → Unicode BMP(ちょうど16進4桁)
\\Uxxxxxxxx → Unicodeフルレンジ(ちょうど16進8桁)
\\N{name}  → Unicode文字名による指定

raw文字列

文字列に r をプレフィックスすると、エスケープシーケンスの処理が無効になります:

path = r"C:\Users\name\Documents"   # バックスラッシュはリテラル
regex = r"\d+\.\d+"                   # ダブルエスケープ不要

raw文字列は奇数個のバックスラッシュで終わることができません — r"path\" は構文エラーです。

トリプルクォート文字列

トリプルクォート(""" または ''')は \n なしで複数行のコンテンツを記述できます。トリプルクォート文字列内でもエスケープは機能しますが、改行のエスケープは不要です。

f文字列のエスケープ

f文字列では波括弧が補間デリミタです。リテラルの波括弧を含めるには二重にします:

f"{{not interpolated}}"   # 出力: {not interpolated}
f"Value: {x}"             # 出力: Value: 42

bytesとstrの違い

Python 3は str(Unicode)と bytes を区別します。バイト文字列(b"...")はASCII文字と \xHH エスケープのみを受け入れ、\u\N{} は使用できません。

デバッグ用のrepr()

repr() はすべての特殊文字がエスケープされた文字列を返し、デバッグに非常に有用です。

ユースケース

Pythonの文字列エスケープは、ファイルパス処理コードの記述、パラメータバインディングによるSQLクエリの構築、正規表現パターンの作成、ETLパイプラインでのテキストデータ処理、設定ファイルの生成、特殊文字を含むテストアサーションの記述、WindowsとUnixパスを処理するクロスプラットフォームスクリプトの作成に必要です。

試してみる — String Escape/Unescape

フルツールを開く