如何将双反斜杠替换为单反斜杠

How to replace double backslash to single backslash

很多调查结果都是针对python2的,我的情况是python3:

我需要将双反斜杠替换为单反斜杠

a = 'RXIE-SERVER\MSSQLSERVER_NEW'

来自此 post 的 "accepted answer" 在这里不起作用:

那么这里的问题是什么?非常感谢。

[更新]:

感谢@ShadowRanger 的回复,所以如果在替换操作后打印字符串,它可以正常工作,但是,在我的情况下,我需要连接 post-替换以生成另一个变量(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

a = 'RXIE-SERVER\MSSQLSERVER_NEW'

没有双反斜杠。它有一个转义的单反斜杠,转义它更安全(并且最终将被要求)所以 Python 不认为 \M 是字符串转义的尝试。如果你这样做:

print(a)

你会看到它只打印一个反斜杠(因为 print 输出原始数据而不显示转义)。

a.replace('\', '') 不起作用的原因是因为它将单个反斜杠替换为空(并且它将对所有反斜杠都这样做); a.replace('\\', '\') 不起作用,因为 '\\' 代表实际的双反斜杠,而您没有任何反斜杠。

如果您的输入来自其他来源(不是您描述的文字)并且 实际上 有双反斜杠,那么 a.replace('\\', '\') 实际上有效,但 REPL 的回显对象的 repr,对于 str,这意味着添加反斜杠转义以使其成为合法的、等效的 str 文字,所以它 看起来 就像双反斜杠,但只有一个。如果将 >>> a.replace('\\', '\') 更改为 >>> print(a.replace('\\', '\'))(打印人性化的形式,而不是 repr),您会看到它只显示一个反斜杠。

如果您不喜欢它在您的代码中的样子,请使用原始字符串来消除对转义的需要:

a = r'RXIE-SERVER\MSSQLSERVER_NEW'
#   ^ note prefix that makes it raw