Python用反斜杠替换正斜杠

时间:2013-01-31 21:12:36

标签: python regex

我有

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'

帮助!这让我疯了。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

您遇到此问题的原因是r""语法的行为,请从Python Documentation

中解释一下
  

r“\”“是一个有效的字符串文字,由两个字符组成:反斜杠和双引号; r”\“不是有效的字符串文字(即使原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义以下引号字符)。

因此,您需要使用普通的转义字符串作为最后一个参数。

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

答案 2 :(得分:1)

我只需在r前加/即可更改正斜杠。

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

答案 3 :(得分:0)

两个问题:

  1. 原始文字不能以单个反斜杠结尾,因为它被解释为转义引号字符。因此,请使用带有转义符的常规(非原始)文字:'\\\\MYDIR\\data\\'
  2. 显示时(使用repr样式),字符串将显示转义符。因此,'\\\\'只有两个实际的反斜杠。因此,'\\\\MYDIR\\data\\\\abc'确实是\\MYDIR\data\\abc