文字列リテラルは以下の字句定義で記述されます:
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> |
上記の生成規則で示されていない文法的な制限が一つあります。それは 文字列リテラルの 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) |
備考:
標準の 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
エスケープシーケンスは、バックスラッシュが
奇数個連なっている場合にのみ認識されます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。