2011-01-24 6 views
81

私は最初に、re.compile()のメソッド引数として複数の行にわたる正規表現を作成するのを見ました。だから、はRegExの略です。例えば"r"の文字列リテラルに先行するものは何ですか?

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

のでr、この場合には何を意味するのでしょうか?なぜそれが必要なのでしょうか?

+0

注 - これはPythonの自動文字列連結の単なる一例であり、任意の接頭辞で動作しますかなし。 –

+1

'r'や 'u'のような文字列の前には、ドキュメントを読む必要があることを意味します。真剣に。 "さまざまなキャラクターで遊んだ"は、あなたができる最悪のことです。あなたはそのように多くのことを学ぶことはなく、あなたが学ぶことは遅く混乱するでしょう。ドキュメントをお読みください。お願いします。 –

+7

私は試しました。私は、「私は彼らが正式に何を呼んでいるのかわからないので、答えを見つけるために苦労している。 - 私は本当に見る時間の贅沢はなかった。あなたは、期限と物事を知っています。 :P私は "python string prefix"だけを検索し、 "Lexical analysis"へのトップアンサーのリンクは2番目の結果でしたが、 "Lexical analysis"はリンク先ページの読み込みを邪魔しました。 –

答えて

107

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

r'\n'n続く文字\として扱われながら

'\n'は、改行文字として扱われます。

When an 'r' or 'R' prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string. For example, the string literal r"\n" consists of two characters: a backslash and a lowercase 'n' . String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.

出典:括弧内の複数行にわたる文字列の分割は文字の接頭辞とは何の関係もないことをPython string literals

+3

_God_あなたは私に大きな頭痛を今日保存しました。私は何週間も私を悩ませていましたが、私のパラメタに 'r'が足りないことを知りました。真剣にありがとう、ありがとう。 –

+0

バックスラッシュ\ '\\'は最後のチャーターにすることはできません。それ以外の場合は 'SyntaxError:EOL scaning string literal'エラーが発生します。 Python3の場合、 'print(r" Test \ new ")' – Arthur

+0

'.format()'を使った文字列補間は生の文字列でも動作します。 [書式設定の例](https://docs.python.org/3.6/library/string.html#format-examples) –

23

エスケープは翻訳されません。たとえば:

r'\n' 

は手紙nバックスラッシュに続く文字列です。 (rが改行文字になります)

bは、バイト文字列の略で、Python 3で使用されます。ここで、文字列はデフォルトでUnicodeです。 Python 2.xの文字列は、デフォルトではバイト文字列で、Unicodeを示すにはuを使用します。

+1

あなたはこれを忘れました: http://docs.python.org/reference/lexical_analysis.html#string-literals –

関連する問題