许多发现是针对python2的,我的情况是python3:
我需要将双反斜杠替换为单反斜杠
a = 'RXIE-SERVER\\MSSQLSERVER_NEW'
此帖子python3 replacing double backslash with single backslash上的“可接受的答案”在这里无效:
那么这里是什么问题?非常感谢。
[更新]:
由于@ShadowRanger的答复,因此,如果在替换操作之后打印字符串,则可以正常工作,但是,在我的情况下,我需要连接后替换位置以生成另一个变量(conn_str),如您所见,它仍然显示双反斜杠。
有任何解决方法的线索吗?
非常感谢您。
server = str.replace(data['server'], "\\\\", "\\")
database = data['database']
driver = data['driver']
auth = data['auth']
conn_str = "DRIVER={" + driver + "}; SERVER=" + server + "; Database=" + database + ";" + auth
答案 0 :(得分:3)
a = 'RXIE-SERVER\\MSSQLSERVER_NEW'
没有双反斜杠。它有一个转义的反斜杠,只是更安全(并且最终将需要转义)才能使它转义,所以Python认为\M
并不是对字符串进行转义的尝试。如果您这样做:
print(a)
您会看到它只打印一个反斜杠(因为print
输出原始数据而没有显示转义符。)
a.replace('\\', '')
不起作用的原因是因为它什么都没有替换了单个反斜杠(并且对于所有反斜杠都会这样做); a.replace('\\\\', '\\')
不起作用,因为'\\\\'
代表实际的双反斜杠,而您没有任何反斜杠。
如果您的输入来自其他来源(不是您描述的文字),并且实际上具有双反斜杠,则a.replace('\\\\', '\\')
实际上有效,但是REPL会回显{{1} },而对于repr
,则意味着添加反斜杠转义符以使其成为合法的等效str
文字,因此看上去就像是一个双反斜杠,但是只有一个。如果将str
更改为>>> a.replace('\\\\', '\\')
(打印出人性化的表单,而不是>>> print(a.replace('\\\\', '\\'))
),则会看到它仅显示一个反斜杠。
如果您不喜欢代码中的外观,请使用原始字符串来消除转义的需要:
repr