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