字符串文字前面带有“r”的含义是什么意思?

时间:2011-01-24 08:48:10

标签: python string syntax literals rawstring

我第一次看到它用于构建跨多行的正则表达式作为re.compile()的方法参数,所以我假设r代表RegEx。

例如:

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

那么r在这种情况下意味着什么?我们为什么需要它?

2 个答案:

答案 0 :(得分:136)

r表示该字符串将被视为原始字符串,这意味着将忽略所有转义码。

举个例子:

'\n'将被视为换行符,而r'\n'将被视为字符\,后跟n

  

如果存在'r''R'前缀,   反斜杠后面的字符是   包含在字符串中没有变化,   并且所有反斜杠都留在了   串。例如,字符串   文字r"\n"由两个组成   字符:反斜杠和   小写'n'。字符串引号可以是   用反斜杠逃脱,但是   反斜杠保留在字符串中;对于   例如,r"\""是一个有效的字符串   文字由两个字符组成:   反斜杠和双引号; r"\"   不是有效的字符串文字(甚至是   原始字符串不能以奇数结尾   反斜杠)。具体来说,是原始的   字符串不能以单个结尾   反斜杠(因为反斜杠会   逃避以下引用字符)。   还要注意单个反斜杠   然后解释换行符   作为这两个角色的一部分   字符串,而不是续行。

来源:Python string literals

答案 1 :(得分:27)

这意味着转义不会被转换。例如:

r'\n'

是一个带反斜杠后跟字母n的字符串。 (没有r,它将是换行符。)

b代表字节字符串,在Python 3中使用,其中字符串默认为Unicode。在Python 2.x中,默认情况下字符串是字节字符串,您可以使用u来表示Unicode。