6

我有

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

4 回答 4

6

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

foo.replace(r'/DIR/', '\\\\MYDIR\\data\\')
于 2013-01-31T21:16:33.280 回答
3

您遇到这种情况的原因是由于r""语法的行为,从Python 文档中获取一些解释

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

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

>>> foo = "/DIR/abc"
>>> print foo.replace(r"/DIR/", "\\\\MYDIR\\data\\")
\\MYDIR\data\abc
于 2013-01-31T21:22:00.650 回答
3

我只是r在前面放了一个/来更改正斜杠。

inv_num = line.replace(r'/', '-')
于 2017-06-13T14:55:15.633 回答
0

两个问题:

  1. 原始文字根本不能以单个反斜杠结尾,因为它被解释为转义引号字符。因此,使用带有转义符的常规(非原始)文字:'\\\\MYDIR\\data\\'
  2. 显示时(使用repr样式),字符串将出现转义。因此,'\\\\'只有两个实际的反斜杠。所以,'\\\\MYDIR\\data\\\\abc'真的\\MYDIR\data\\abc
于 2013-01-31T21:23:49.197 回答