8

生の文字列リテラルの仕組みがわかりません。それを使用すると、改行ではなく \n として扱われるrように、すべてのスペシャルが無視されることを私は知っています。\nしかし、私はこれをやろうとしました:

x = r'\'

そしてそれSyntaxError: EOL while scanning string literalは「\」ではなく言った

なぜ?私はそれを正しく理解しましたか?また、これの説明は何ですか:

print r'\\' # gives '\\'
print r'\\\' # gives SyntaxError
4

2 に答える 2

7

一重引用符で始まる文字列に一重引用符を挿入する唯一の方法は、エスケープすることです。したがって、未加工の文字列リテラルと通常の文字列リテラルの両方で、エスケープされていないバックスラッシュの後に引用文字が続く場合、引用文字をエスケープできます。一重 (または二重) 引用符で始まる文字列リテラル内で一重 (または二重) 引用符を表現する方法が必要であるという要件があるため'\'、生の文字列リテラルまたは通常の文字列リテラルを使用するかどうかにかかわらず、文字列リテラルは正当ではありません。

リテラルのバックスラッシュの数が奇数の任意の文字列を取得するには、通常の文字列リテラルを使用するのが最善の方法だと思います。これは、使用しようとしても機能するためですが、1 つではなく2 つのバックスラッシュr'\\'を含む文字列が返されるためです。

>>> '\\' # A single literal backslash.
'\\'
>>> len('\\')
1
>>> r'\\' # Two literal backslashes, 2 is even so this is doable with raw.
'\\\\'
>>> len(r'\\')
2
>>> '\\'*3 # Three literal backslashes, only doable with ordinary literals.
'\\\\\\'
>>> len('\\'*3)
3

この回答は、他の回答を補完することのみを目的としています。

于 2015-05-10T22:28:00.420 に答える
6

生のリテラルでは、バックスラッシュは文字列を定義している引用符をエスケープします。

文字列の引用符はバックスラッシュでエスケープできますが、バックスラッシュは文字列に残ります。たとえば、r"\""バックスラッシュと二重引用符の 2 文字で構成される有効な文字列リテラルです。r"\"は有効な文字列リテラルではありません (生の文字列であっても、奇数のバックスラッシュで終わることはできません)。具体的には、生の文字列を単一のバックスラッシュで終了することはできません (バックスラッシュは次の引用文字をエスケープするため)。また、単一のバックスラッシュとそれに続く改行は、行の継続としてではなく、文字列の一部としてこれら 2 つの文字として解釈されることに注意してください。

ドキュメントから

于 2015-05-10T22:14:11.803 に答える