2.4.1 文字列リテラル

文字列リテラルは以下の字句定義で記述されます:

stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''"
| '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | escapeseq
longstringitem ::= longstringchar | escapeseq
shortstringchar ::= <any source character except "\" or newline or the quote>
longstringchar ::= <any source character except "\">
escapeseq ::= "\" <any ASCII character>
Download entire grammar as text.

上記の生成規則で示されていない文法的な制限が一つあります。それは 文字列リテラルの stringprefix と残りの部分の間に 空白を入れてはならないということです。ソースコード文字セット (source character set) はエンコード宣言で決まります.エンコード 宣言がない場合には ASCII になります.2.1.4 節を 参照してください.

より平易な説明: 文字列リテラルは、対応する一重引用符 (') または 二重引用符 (") で囲われます。また、対応する三連の一重引用符 や二重引用符で囲うこともできます (通常、三重クオート文字列: triple-quoted string として 参照されます)。バックスラッシュ (\) 文字を使って、 ある文字を例えば改行文字やバックスラッシュ自体、クオート文字といった 別の意味を持つようにエスケープすることができます。 文字列リテラルの前には、オプションとして "r" または "R" 一文字を接頭してもかまいません; このような文字列は raw 文字列 (raw string) と呼ばれ、バックスラッシュによるエスケープシーケンスの 解釈規則が異なります。"u" や "U" を接頭すると、 文字列は Unicode 文字列 (Unicode string) になります。Unicode 文字列は Unicode コンソーシアムおよび ISO 10646 で定義されている Unicode 文字セット を使います。Unicode 文字列では、文字セットに加えて、以下で説明するような エスケープシーケンスを利用できます。二つの接頭文字を組み合わせることも できます; この場合、"u" は "r" より前に出現しなくては なりません。

三重クオート文字列中には、三連のエスケープされないクオート文字で 文字列を終端してしまわないかぎり、エスケープされていない改行やクオートを 書くことができます (さらに、それらはそのまま文字列中に残ります)。 (ここでいう ``クオート'' とは、文字列の囲みを開始するときに使った文字 を示し、'" のいずれかです)。

"r" または "R" 接頭文字がつかないかぎり、 文字列中のエスケープシーケンスは標準 C で使われているのと同様の 法則にしたがって解釈されます。以下に Python で認識されるエスケープ シーケンスを示します:

エスケープシーケンス 意味 備考
\newline 無視
\\ バックスラッシュ (\)
\' 一重引用符 (')
\" 二重引用符 (")
\a ASCII 端末ベル (BEL)
\b ASCII バックスペース (BS)
\f ASCII フォームフィード (FF)
\n ASCII 行送り (LF)
\N{name} Unicode データベース中で名前 name を持つ文字 (Unicode のみ)
\r ASCII 復帰 (CR)
\t ASCII 水平タブ (TAB)
\uxxxx 16-bit の 16 進数値 xxxx を持つ文字 (Unicode のみ) (1)
\Uxxxxxxxx 32-bit の 16 進数値 xxxxxxxx を持つ文字 (Unicode のみ) (2)
\v ASCII 水平タブ (VT)
\ooo 8 進数値 ooo を持つ文字 (3,5)
\xhh 16 進数値 hh を持つ文字 (4,5)

備考:

(1)
サロゲートペアの断片を形成する個々のコード単位は、このエスケープ シーケンスでエンコードすることができます。
(2)
Unicode 文字はすべてこの方法でエンコードできますが、 Python が 16-bit コード単位を扱うようにコンパイルされている (デフォルトの設定です) 場合、基本多言語面 (Basic Multilingual Plane, BMP) 外の文字はサロゲートペア (surrogate pair) を使ってエンコードする ことになります。サロゲートペアの断片を形成する個々のコード単位は このエスケープシーケンスを使ってエンコードすることができます。
(3)
標準 C と同じく、最大で 3 桁の 8 進数まで受理します。
(4)
標準 C とは違い、最大で 2 桁の 16 進数しか受理されません。
(5)
文字列リテラル中では, 16 進および 8 進エスケープはエスケープの 示すバイト文字になります.そのバイト文字がソース文字セットで エンコードされている保証はありません.Unicode リテラル中では, エスケープ文字はエスケープ文字の表現する値を持つ Unicode 文字に なります.

標準の C とは違い、認識されなかったエスケープシーケンスはそのまま 文字列中に残されます。すなわち。 バックスラッシュも文字列中に残ります。 (この挙動はデバッグの 際に便利です: エスケープシーケンスを誤入力した場合、その結果として 出力に失敗しているのが用意にわかります) テーブル中で ``(Unicode のみ)'' と書かれたエスケープシーケンスは、非 Unicode 文字列リテラル中では認識されないエスケープシーケンスのカテゴリに 分類されるので注意してください。

接頭文字 "r" または "R" がある場合、バックスラッシュ の後にくる文字はそのまま文字列中に入り、バックスラッシュは全て 文字列中に残されます。例えば、文字列リテラル r"\n" は二つの文字: バックスラッシュと小文字の "n" からなる文字列を表すことに なります。引用符はバックスラッシュでエスケープすることができますが、 バックスラッシュ自体も残ってしまいます; 例えば、r"\"" は不正でない 文字列リテラルで、バックスラッシュと二重引用符からなる文字列を表します; r"\" は正しくない文字列リテラルです (raw 文字列を奇数個連なった バックスラッシュで終わらせることはできません)。厳密にいえば、 (バックスラッシュが直後のクオート文字をエスケープしてしまうため) raw 文字列を単一のバックスラッシュで終わらせることはできない ということになります。また、バックスラッシュの直後に改行がきても、 行継続を意味するのではなく 、それら二つの文字として解釈されるので 注意してください。

"r" および "R" 接頭文字を "u" や "U" と合わせて使った場合、\uXXXX エスケープ シーケンスは処理されますが、その他のバックスラッシュは すべて文字列中に残されます 。例えば、文字列リテラル ur"\u0062\n" は、3つの Unicode 文字: `LATIN SMALL LETTER B' (ラテン小文字 B)、`REVERSE SOLIDUS' (逆向き斜線)、 および `LATIN SMALL LETTER N' (ラテン小文字 N) を表します。 バックスラッシュの前にバックスラッシュをつけてエスケープすることは できます; しかし、バックスラッシュは両方とも文字列中に残されます。 その結果、\uXXXX エスケープシーケンスは、バックスラッシュが 奇数個連なっている場合にのみ認識されます。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。