提问人:Jmcmgaming89 提问时间:11/8/2023 最后编辑:John KugelmanJmcmgaming89 更新时间:11/8/2023 访问量:46
误解在“”之前使用 r 删除转义字符?[复制]
Misunderstanding removing escape characters using r before ""? [duplicate]
问:
我对使用 in print 函数删除转义字符有误解。下面对我不起作用的非常基本的例子,以及我为纠正这种情况所做的几项努力之一:r
print(r"I am trying to keep the backslash in the link using r \www.home.com\")
SyntaxError: unterminated string literal (detected at line 19)
这是我尝试打印到控制台时出现的错误。我尝试了不同的方法来结束字符串文字。有人可以帮我理解这里发生的事情和逻辑吗?
我尝试了各种修复方法,例如:
print("\\www.home.com\\")
这确实有效,但在我的脑海中,使用之前也应该有效。r
""
Example of what works:
print(r"This string would print normally if I remove the last back slash \www.home.com")
答:
这是原始字符串的一个特殊限制,即原始字符串不能以反斜杠结尾。
官方文档转义序列摘录:
即使在原始文字中,引号也可以用反斜杠转义,但是 反斜杠保留在结果中;例如,是有效的字符串 由两个字符组成的文字:反斜杠和双引号; 不是有效的字符串文字(即使是原始字符串也不能以 反斜杠的奇数)。具体来说,原始文字不能以 单个反斜杠(因为反斜杠会转义以下内容 引号字符)。
r"\""
r"\"
因此,在这种特殊情况下,字符串文字需要以反斜杠结尾但包含其他反斜杠,一种解决方法是将结束反斜杠写成一个单独的字符串文字,并用另一个反斜杠转义反斜杠:
print(r'C:\deeply\nested\folders' '\\')
另一种解决方法是用空格填充最后一个反斜杠,然后在运行时调用该方法将其删除:rstrip
print(r'C:\deeply\nested\folders\ '.rstrip())
可以说,这两者看起来都比用常规引号写满转义序列的整句文字更干净:
print('C:\\deeply\\nested\\folders\\')
这三种方法都产生相同的输出:
C:\deeply\nested\folders\
"...我对在打印函数中使用 r 来删除转义字符有误解。..."
这称为原始字符串。
以下是 Python 文档中的一些摘录。
Python 语言参考 – 2.4.1。String 和 Bytes 文本
"...字符串和字节文字都可以选择以字母或 ;此类字符串称为原始字符串,并将反斜杠视为文本字符。..."
'r'
'R'
"...如果您不希望以 开头的字符被解释为特殊字符,您可以通过在第一个引号前添加 ...
。原始字符串有一个微妙的方面:原始字符串可能不会以奇数个字符结尾;有关详细信息和解决方法,请参阅常见问题解答条目。..."\
r
\
代码不起作用的原因是 Python 将转义序列解释为文本值。
本质上是捕获后续字符。
因此,结局被认为是字面上的。\
\"
这是一个类似的问题和答案。
为什么 Python 的原始字符串文字不能以单个反斜杠结尾?
在这种情况下,只需使用常规字符串文字即可。
print("I am trying to keep the backslash in the link using r \www.home.com\\")
评论