误解在“”之前使用r删除转义字符?

问题描述 投票:0回答:1

我对在 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")
python escaping
1个回答
0
投票

原始字符串的一个特殊限制是原始字符串不能以反斜杠结尾。

摘自官方文档的转义序列

即使在原始文字中,引号也可以用反斜杠转义,但是 反斜杠保留在结果中;例如,

r"\""
是一个有效的字符串 由两个字符组成的文字:反斜杠和双引号;
r"\"
不是有效的字符串文字(即使原始字符串也不能以 奇数个反斜杠)。具体来说,原始文字不能以 一个反斜杠(因为反斜杠会转义下面的内容) 引用字符)。

因此,在字符串文字需要以反斜杠结尾但包含其他反斜杠的特殊情况下,一种解决方法是将结尾反斜杠编写为单独的字符串文字,并用另一个反斜杠转义反斜杠:

print(r'C:\deeply\nested\folders' '\\')

这可能看起来比用正则引号编写整个字符串文字更干净:

print('C:\\deeply\\nested\\folders\\')

两者都会输出:

C:\deeply\nested\folders\
© www.soinside.com 2019 - 2024. All rights reserved.