2011-01-24 48 views
81

我第一次看到它用於構建跨越多行的正則表達式作爲re.compile()的方法參數,所以我認爲r代表正則表達式。以「r」表示的字符串前面的內容是什麼意思?

例如:

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

那麼,是什麼r在這種情況下,是什麼意思?我們爲什麼需要它?

+0

注意,在括號內的多個線串的分裂無關與字符的前綴 - 這僅僅是Python的自動串並置的一個例子,與任何前綴或工作沒有。 – 2011-01-24 09:10:24

+1

前面帶有字母'r'或'u'的字符串表示您需要閱讀文檔。認真。 「玩不同的角色」是你能做的最糟糕的事情。你不會學到太多東西,你學到的東西會變得緩慢而混亂。請閱讀文檔。請。 – 2011-01-24 11:08:38

+7

我試過了。我確實說過,「我很難在文檔中尋找答案,因爲我不知道他們被正式稱爲什麼。」 - 我沒有奢侈的時間去看看。你知道,截止日期和東西。 :P我只搜索了「python字符串前綴」,雖然第一個答案與「詞法分析」的鏈接是第二個結果,但「詞法分析」有點讓我遠離閱讀鏈接頁面,因爲它聽起來像是一個沉重的閱讀。 – 2011-01-26 05:42:22

回答

107

r表示該字符串被視爲一個原始字符串,這意味着所有的轉義碼都將被忽略。

有關示例:

'\n'將被視爲一個新行字符,同時將r'\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

23

這意味着逃生不會被翻譯。例如:

r'\n' 

是用反斜槓後面跟有字母n的字符串。 (沒有r這將是一個換行符。)

b確實代表字節字符串,並在Python 3中使用,其中字符串默認情況下是Unicode。在Python 2.x中,字符串默認是字節字符串,您可以使用u來表示Unicode。

相關問題