web-dev-qa-db-ja.com

文字列リテラルの前に「r」とはどういう意味ですか?

re.compile()へのメソッド引数として複数行にわたる正規表現の構築に使用されるのを最初に見たので、rはRegExを表していると想定しました。

例えば:

regex = re.compile(
    r'^[A-Z]'
    r'[A-Z0-9-]'
    r'[A-Z]$', re.IGNORECASE
)

この場合、rはどういう意味ですか?なぜ必要なのですか?

109

rは、文字列が生の文字列として扱われることを意味します。つまり、すべてのエスケープコードが無視されます。

例:

'\n'は改行文字として扱われ、r'\n'は、文字\に続いてn

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

ソース: Python文字列リテラル

つまり、エスケープは翻訳されません。例えば:

r'\n'

バックスラッシュの後に文字nが続く文字列です。 (rがなければ、改行になります。)

bはバイト文字列を表し、Python 3で使用されます。デフォルトでは文字列はUnicodeです。InPython 2.x文字列デフォルトではバイト文字列であり、uを使用してUnicodeを示します。

28
Nate