我有
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'
帮助!这让我疯了。
答案 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)
两个问题:
'\\\\MYDIR\\data\\'
。repr
样式),字符串将显示转义符。因此,'\\\\'
只有两个实际的反斜杠。因此,'\\\\MYDIR\\data\\\\abc'
确实是\\MYDIR\data\\abc
。