前缀"r"表示字符串字面量什么意思?

175 投票
2 回答
157531 浏览
提问于 2025-04-16 10:30

我第一次看到这个用法是在构建跨多行的正则表达式时,作为方法参数传给 re.compile(),所以我猜 r 是代表正则表达式(RegEx)的意思。

比如说:

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

那么在这种情况下,r 到底是什么意思呢?我们为什么需要它呢?

2 个回答

45

这句话的意思是,转义字符不会被翻译成其他东西。举个例子:

r'\n'

这是一个包含反斜杠和字母 n 的字符串。(如果没有 r,它就会变成换行符。)

b 代表字节字符串,这个概念在 Python 3 中使用,因为在 Python 3 中,字符串默认是 Unicode 格式。而在 Python 2.x 中,字符串默认是字节字符串,如果想表示 Unicode,就需要用 u 来标识。

254

这里的 r 表示这个字符串是一个“原始字符串”,也就是说,所有的转义符号都会被忽略。

举个例子:

'\n' 会被当作换行符,而 r'\n' 则会被当作字符 \ 后面跟着 n

当字符串前面有 'r''R' 这个前缀时,反斜杠后面的字符会原样保留在字符串里,所有的反斜杠也会保留在字符串中。例如,字符串 r"\n" 由两个字符组成:一个反斜杠和一个小写的 'n'。字符串中的引号可以用反斜杠转义,但反斜杠仍然会保留在字符串里;比如 r"\"" 是一个有效的字符串,由两个字符组成:一个反斜杠和一个双引号;而 r"\" 不是一个有效的字符串(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义后面的引号字符)。另外,注意一个单独的反斜杠后面跟着换行符会被解释为这两个字符的一部分,而不是作为换行的延续。

来源:Python 字符串字面量

撰写回答