1

我在 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之前和之后的字符

怎么可能做到这一点?

4

3 回答 3

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)

仅当此时连续反斜杠的数量为奇数时才替换反斜杠。

于 2013-02-20T10:25:08.417 回答
0

你不需要正则表达式,如果你只是做一个简单的字符串替换来加倍所有的反斜杠,然后另一个字符串替换来取消已经加倍的那些,那么你就到了你想去的地方:

>>> path = "C:\\Temp\\\\TestEmpty"
>>> path.replace('\\','\\\\').replace(r'\\\\', r'\\')
'C:\\\\Temp\\\\TestEmpty'

或者先将加倍的反斜杠取消加倍,然后将所有反斜杠加倍:

>>> path.replace('\\\\', '\\').replace('\\', '\\\\')
'C:\\\\Temp\\\\TestEmpty'
于 2013-02-20T12:08:34.530 回答
0

我使用以下组合来回避一点:

escaped_path = re.sub( r'(\\)+', '/', path).replace('/', '\\')

(它的额外好处是对某人(我)可能通过贪婪地替换反斜杠而错误地输入的路径进行基本卫生处理。)

于 2017-07-31T16:18:49.677 回答