我对在 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' '\\')
这可能看起来比用正则引号编写整个字符串文字更干净:
print('C:\\deeply\\nested\\folders\\')
两者都会输出:
C:\deeply\nested\folders\