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

これには正規表現は必要ありません。単純な文字列置換を実行してすべてのバックスラッシュを 2 倍にし、続いて別の文字列置換を行って既に 2 倍になっているものを元に戻すと、目的の場所に移動できます。

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

または、最初に二重化されたものの二重化を解除してから、すべてのバックスラッシュを二重化します。

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