如何在Python中转义所有未转义的斜杠

1 投票
3 回答
869 浏览
提问于 2025-04-17 16:29

我在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)

只有在这个位置连续的反斜杠数量是奇数的时候,才会替换反斜杠。

撰写回答