我在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)
...但当然这会删除\\
s
怎么可以这样做?
答案 0 :(得分:3)
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)
如果此时连续反斜杠的数量为奇数,则仅替换反斜杠。
答案 1 :(得分:0)
你不需要一个正则表达式,如果你只是做一个简单的字符串替换来加倍所有的反斜杠后跟另一个字符串替换为加倍已经加倍的那些然后你得到你想去的地方:
>>> path = "C:\\Temp\\\\TestEmpty"
>>> path.replace('\\','\\\\').replace(r'\\\\', r'\\')
'C:\\\\Temp\\\\TestEmpty'
或者先加倍加倍,然后加倍所有反斜杠:
>>> path.replace('\\\\', '\\').replace('\\', '\\\\')
'C:\\\\Temp\\\\TestEmpty'
答案 2 :(得分:0)
我使用以下组合来回避:
escaped_path = re.sub( r'(\\)+', '/', path).replace('/', '\\')
(它有一个额外的好处,就是某人(我)可能因更换反斜杠而贪婪而错误输入的道路的基本卫生设施。)