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

2024-10-02 14:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个部分转义路径,如下所示:

path = "C:\\Temp\\\\TestEmpty" # Actual value = C:\Temp\\TestEmpty

我希望所有的斜杠都是这样的:

^{pr2}$

我从一些正则表达式开始

escapedpath = re.sub("[a-zA-Z0-9 _:-](\\)[a-zA-Z0-9 _:-]", "\\\\", path)

…但这当然会删除\\s前后的字符

这怎么可能?在


Tags: path路径revalue字符temp斜杠actual
3条回答

您不需要正则表达式,如果您只需执行一个简单的string replace来加倍所有的反斜杠,然后再执行另一个string replace来消除已经加倍的反斜杠,那么您就可以得到想要的结果了:

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

或者,先将双倍的反斜杠去掉,然后再将所有反斜杠加倍:

^{pr2}$

我用下面的组合来回避一下:

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

(它还有一个额外的好处,即对某些人(我)可能由于贪婪地替换反斜杠而错误地输入的路径进行基本卫生处理。)

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)

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

相关问题 更多 >