重新模块 - 什么是r符号?

时间:2011-11-05 21:23:45

标签: python regex

我试着理解这段代码:

Var1 = re.compile(r"nothing is (\d+)").search

我想知道(在\ d上签名)后r符号的影响是什么。 我知道\ d意思是找到十进制数字(\表示d具有特殊含义),这是否意味着没有r符号我会使用\?如果是这样的话? 我知道在bash shell中只放一个\。

我在这里读到:http://docs.python.org/library/re.html#raw-string-notation

但我无法理解它如何影响上面的代码段代码。 感谢。

2 个答案:

答案 0 :(得分:4)

这是一个raw string literal。它会改变反斜杠以进行字面处理(几乎见下文)。这在编写正则表达式时特别有用,因为它们通常包含反斜杠,如果使用普通的字符串文字,则可能必须转义反斜杠,使正则表达式更难阅读。

如果没有r,您的代码将如下所示:

f = re.compile("nothing is (\\d+)").search

请注意,在这种情况下,不转义反斜杠也有效,因为'\d'不是有效的转义序列:

f = re.compile("nothing is (\d+)").search

但是,依赖此行为可能会导致错误,除非您(以及必须维护代码的每个人)都可以记住允许的转义序列列表。


原始字符串文字的规则是:

  

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

答案 1 :(得分:0)

re无关。

Python string literals可以从r开始;这些被称为“原始字符串”,反斜杠转义(主要)不被解释。