Python の生の文字列リテラルの謎を解明する: なぜ奇数のバックスラッシュがあるのか
Python の生の文字列リテラルは、エスケープシーケンスを必要とせずに文字列内の特殊文字を使用できます。しかし、興味深い疑問が生じます: なぜこれらの生の文字列は 1 つのバックスラッシュで終わることができないのでしょうか?
生の文字列規則の探索
Python のドキュメントによると、奇妙なものはありません。生の文字列リテラル内のバックスラッシュの数により、構文エラーが発生します。次の例を考えてみましょう。
>>> r'\' File "<stdin>", line 1 r'\' ^ SyntaxError: EOL while scanning string literal >>> r'\' '\\' >>> r'\\' File "<stdin>", line 1 r'\\' ^ SyntaxError: EOL while scanning string literal
パーサーのジレンマ
一見すると、パーサーが単純に生の文字列内のバックスラッシュを通常の文字として扱うことができるのは論理的であるように思えます。ただし、考慮すべき微妙なニュアンスがあります。
Python の公式チュートリアルによると、「'r' または 'R' プレフィックスが存在する場合、バックスラッシュに続く文字は変更されずに文字列に含まれ、すべてバックスラッシュは文字列内に残ります。」これは、バックスラッシュに続く文字は生の文字列の不可欠な部分であることを意味します。
解析中、インタープリターは生の文字列内でバックスラッシュを検出すると、2 つの文字 (バックスラッシュと後続の文字) を予期します。これは前述のドキュメントと一致しています。したがって、パーサーは、後続の文字の期待に違反するため、生の文字列を 1 つのバックスラッシュで終了することはできません。
結論
ただし、終端バックスラッシュは存在しません。生の文字列では直観に反しているように思えるかもしれませんが、これは Python が生の文字列内の特殊文字を示すものとしてバックスラッシュを厳密に解釈することに由来しています。この規則により、複雑なエスケープ シーケンスを必要とせずに、生の文字列が特定の書式要件を持つテキストを表現するための信頼できるツールであり続けることが保証されます。
以上がPython の生の文字列を単一のバックスラッシュで終了できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。