Python将斜杠替换为反斜杠

7 投票
5 回答
34785 浏览
提问于 2025-04-17 14:22

我有

foo = '/DIR/abc'

我想把它转换成

bar = '\\MYDIR\data\abc'

所以,我在Python中这样做:

>>> foo = '/DIR/abc'
>>> bar = foo.replace(r'/DIR/',r'\\MYDIR\data\')
  File "<stdin>", line 1
    bar = foo.replace(r'/DIR/',r'\\MYDIR\data\')
                                                 ^
SyntaxError: EOL while scanning string literal

但是,如果我试着通过输入 bar = foo.replace(r'/DIR/',r'\\MYDIR\data\\') 来转义最后一个反斜杠,那我就得到了这个怪物:

>>> bar2
'\\\\MYDIR\\data\\\\abc'

救命!这让我快疯了。

5 个回答

3

你遇到这个问题是因为 r"" 这种写法的特性。这里引用一下 Python 文档 的解释。

r"\"" 是一个有效的字符串,它由两个字符组成:一个反斜杠和一个双引号;而 r"\" 不是一个有效的字符串(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会让后面的引号失效)。

所以你需要为最后一个参数使用一个普通的转义字符串。

>>> foo = "/DIR/abc"
>>> print foo.replace(r"/DIR/", "\\\\MYDIR\\data\\")
\\MYDIR\data\abc
4

我只是在斜杠前面加了一个 r,这样就改变了这个斜杠的用法。

inv_num = line.replace(r'/', '-')
7

第二个参数应该是一个字符串,而不是正则表达式模式:

foo.replace(r'/DIR/', '\\\\MYDIR\\data\\')

撰写回答