用Python将所有的“\”替换为“\\”。

14

有人知道如何在Python中用\\替换所有的\吗?我已经尝试过:

re.sub('\','\\',string)

但由于转义序列导致它出现问题。有人知道我的问题的答案吗?


3
http://mywiki.wooledge.org/XyProblem - Ignacio Vazquez-Abrams
@gnibbler r'\' 不是有效的。 - JBernardo
@JBernardo,嘿,我刚意识到并删除了那个评论,但为什么不直接使用str方法而不是正则表达式呢?例如:string.replace('\\',r'\\') - John La Rooy
@gnibbler 正如 @Ignacio 所写,可能这并不是 OP 的真正问题... 也许他在处理 Windows 路径或 CRLF 方面遇到了问题。 - JBernardo
@JBernardo,在这种情况下,告诉OP在Windows路径中使用“/”(而不是“\”)可能有帮助,也可能没有帮助 :) - John La Rooy
4个回答

22

您只需要在字符串中转义反斜杠:(此外,不需要使用正则表达式)

>>> s = "cats \\ dogs"
>>> print s
cats \ dogs
>>> print s.replace("\\", "\\\\")
cats \\ dogs

1
这个不起作用。您需要使用re.sub("\\","\\\\",string)或re.sub(r'\', r'\\', string),因为您需要对每个斜杠进行两次转义......一次用于字符串,一次用于正则表达式。 - eric.christensen

7

你应该做:

re.sub(r'\\', r'\\\\', string)

作为字符串,r'\'是不合法的。
顺便说一下,在正则表达式中应始终使用原始(r'')字符串,因为许多操作都需要反斜杠。

1
这个不起作用。你需要使用re.sub("\\","\\\\",string)或者re.sub(r'\', r'\\', string),因为你需要将每个斜杠转义两次...一次是为了字符串,一次是为了正则表达式。 - eric.christensen
1
仍然不起作用。您正在尝试使用特殊字符的正则表达式转义序列的第一部分替换文字\,因此它会报错:“错误:正则表达式意外结束”。 - eric.christensen
@ecounysis 你说得完全正确。我还没有在解释器中尝试过... :( - JBernardo

3

你需要使用re.sub("\\\\","\\\\\\\\",string)或者re.sub(r'\\', r'\\\\', string),因为你需要对每个斜杠进行两次转义...一次用于字符串,一次用于正则表达式。

>>> whatever = r'z\w\r'
>>> print whatever
z\w\r
>>> print re.sub(r"\\",r"\\\\", whatever)
z\\w\\r
>> print re.sub("\\\\","\\\\\\\\",whatever)
z\\w\\r

3

您应该转义反斜杠,而且对于这个简单的操作,您不需要使用正则表达式:

>>> my_string = r"asd\asd\asd\\"
>>> print(my_string)
asd\asd\asd\\
>>> replaced = my_string.replace("\\", "\\\\")
>>> print(replaced)
asd\\asd\\asd\\\\

这在解释器中是可以工作的,但在程序运行时失败了。很奇怪。也许我做了一些愚蠢的事情。 - naman1994

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接