为什么原始字符串在括号中表现不一致

时间:2015-11-21 17:44:53

标签: python string python-3.x

例如:

a = (r'''\n1''')

b = (r'''
2''')

print(a)
print(b)

此示例的输出为:

\n1

2

这意味着即使b应该是一个原始字符串,它似乎不像一个工作,为什么会这样?

我还检查过:

if '\n' in b:
    print('yes')

这个输出是yes,这意味着b是一个字符串,其内部确实有\n个字符串。

1 个答案:

答案 0 :(得分:1)

在原始字符串语法中,转义序列没有特殊含义(除了引号前的反斜杠)。字符\n在原始字符串文字中形成两个字符,与常规字符串文字不同,其中这两个字符由换行符替换。

另一方面,实际的换行符是不是转义序列。它只是一个换行符,并且包含在字符串中。

将此与使用1\x31进行比较;后者是数字1的ASCII码点的转义序列。在常规字符串文字中,两者都会为您提供字符1,在原始字符串文字中,不会解释转义序列:

>>> print('1\x31')
11
>>> print(r'1\x31')
1\x31

所有这些与括号无关。括号不会改变r'''...'''原始字符串的行为。删除括号时会发生完全相同的事情

>>> a = r'''\n1'''
>>> a
'\\n1'
>>> print(a)
\n1
>>> b = r'''
... 2'''
>>> b
'\n2'
>>> print(b)

2