如何在Python中转义所有未转义的斜杠
我在Python中有一个部分转义的路径,像这样:
path = "C:\\Temp\\\\TestEmpty" # Actual value = C:\Temp\\TestEmpty
我想把所有的斜杠都变成双斜杠,像这样:
escapedpath = "C:\\\\Temp\\\\TestEmpty" # Actual value = C:\\Temp\\TestEmpty
我开始用了一些正则表达式
escapedpath = re.sub("[a-zA-Z0-9 _:-](\\)[a-zA-Z0-9 _:-]", "\\\\", path)
...但当然这样会把双斜杠前后的字符都去掉
那该怎么做呢?
3 个回答
0
我使用以下组合来稍微绕开一些问题:
escaped_path = re.sub( r'(\\)+', '/', path).replace('/', '\\')
(这还有一个额外的好处,就是可以基本清理一下那些人(我)可能因为贪心而错误输入的路径中的反斜杠。)
0
你不需要用正则表达式来解决这个问题。如果你先简单地把所有的反斜杠(\)都变成两个反斜杠(\\),然后再把已经变成两个的反斜杠变回一个,这样就能达到你想要的效果:
>>> path = "C:\\Temp\\\\TestEmpty"
>>> path.replace('\\','\\\\').replace(r'\\\\', r'\\')
'C:\\\\Temp\\\\TestEmpty'
另外,你也可以先把已经变成两个的反斜杠变回一个,然后再把所有的反斜杠都变成两个:
>>> path.replace('\\\\', '\\').replace('\\', '\\\\')
'C:\\\\Temp\\\\TestEmpty'
4
result = re.sub(r"""(?x)
(?<!\\) # Make sure that there is no backslash before the current position
\\ # Match a backslash
(?= # only if...
(?:\\\\)* # an even number of backslashes follows (including zero)
(?!\\) # and no further backslashes follow after that
) # (End of lookahead assertion)""",
r"\\\\", subject)
只有在这个位置连续的反斜杠数量是奇数的时候,才会替换反斜杠。