【问题标题】:What does preceding a string literal with "r" mean? [duplicate]字符串文字前面带有“r”是什么意思? [复制]
【发布时间】:2011-06-14 09:14:17
【问题描述】:

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

例如:

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

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

【问题讨论】:

  • 请注意,在括号内将字符串拆分为多行与字符前缀无关——这只是 Python 自动字符串连接的一个示例,可以使用任何前缀或不使用任何前缀。

标签: python string syntax literals rawstring


【解决方案1】:

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

举个例子:

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

当存在 'r''R' 前缀时, 反斜杠后面的字符是 包含在字符串中而不做任何更改, 并且所有反斜杠都留在 细绳。例如,字符串 文字r"\n" 由两个 字符:反斜杠和 小写'n'。字符串引号可以是 用反斜杠转义,但是 反斜杠保留在字符串中;为了 例如,r"\"" 是一个有效的字符串 由两个字符组成的文字: 反斜杠和双引号; r"\" 不是有效的字符串文字(即使是 原始字符串不能以奇数结尾 反斜杠)。具体来说,一个原始的 字符串不能以单个结尾 反斜杠(因为反斜杠会 转义以下引号字符)。 另请注意,单个反斜杠 后跟换行符被解释 作为这两个字符的一部分 字符串,不作为续行。

来源:Python string literals

【讨论】:

  • 反斜杠 `\` 不能是最后一个章程,否则会出现错误SyntaxError: EOL while scanning string literal。对于 Python3,它是 print (r"Test\new")
  • 使用.format() 的字符串插值仍然适用于原始字符串。 Formatting Examples
【解决方案2】:

这意味着逃逸不会被翻译。例如:

r'\n'

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

b 确实代表字节字符串,并在 Python 3 中使用,其中字符串默认为 Unicode。在 Python 2.x 中,字符串默认是字节字符串,你可以使用 u 来表示 Unicode。

猜你喜欢
  • 2013-12-13
  • 2014-12-23
  • 2012-07-02
  • 2012-10-07
  • 2011-09-17
  • 2015-01-03
  • 1970-01-01
相关资源
最近更新 更多