【问题标题】:Why is raw string performing inconsistently in parenthesis为什么原始字符串在括号中的执行不一致
【发布时间】:2015-11-21 17:44:53
【问题描述】:

例如:

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

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

print(a)
print(b)

这个例子的输出是这样的:

\n1

2

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

我也查了:

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

这个的输出是yes,意思是b是一个字符串,而且里面确实有\n字符串。

【问题讨论】:

  • 为什么不一致? 转义序列不起作用,但实际的换行符不是转义序列。
  • 当您不想要额外的空格、制表符和换行符时,不要使用三引号字符串。
  • 可以在文档中阅读更多相关信息。 docs.python.org/2/reference/… 这个 SO 回答 stackoverflow.com/q/4415259/4099593
  • 您的问题缺少任何反例来说明您期望发生的情况,或者您认为这是由括号引起的原因。

标签: python string python-3.x


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 2019-11-04
    • 2015-11-02
    • 2013-04-18
    • 2023-03-30
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多