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

时间:2020-02-26 21:21:49

标签: python python-3.x escaping

许多发现是针对python2的,我的情况是python3:

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

a = 'RXIE-SERVER\\MSSQLSERVER_NEW'

此帖子python3 replacing double backslash with single backslash上的“可接受的答案”在这里无效:

enter image description here

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

[更新]:

由于@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

enter image description here

1 个答案:

答案 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