使用Windows文件夹路径的Python正则表达式中的原始字符串

使用Windows文件夹路径的Python正则表达式中的原始字符串,python,regex,string,Python,Regex,String,尝试在此正则表达式的原始字符串中使用反斜杠: import re print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', r'D:\folder\1', r'C:\Some\Path\Data\File.txt') 预期产出: D:\folder\Data\File.txt 但是正在解释\f。有没有办法在不转换为前斜杠的情况下实现此功能?re.sub解释替换字符串()中的转义序列。在\f之前添加一个额外的反斜杠以逃避反斜杠似乎可以实现以下目的: import re

尝试在此正则表达式的原始字符串中使用反斜杠:

import re
print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', r'D:\folder\1', r'C:\Some\Path\Data\File.txt')
预期产出:

D:\folder\Data\File.txt

但是正在解释
\f
。有没有办法在不转换为前斜杠的情况下实现此功能?

re.sub解释替换字符串()中的转义序列。在\f之前添加一个额外的反斜杠以逃避反斜杠似乎可以实现以下目的:

import re
print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', r'D:\\folder\1', r'C:\Some\Path\Data\File.txt')

如果替换字符串是动态的,则始终可以使用另一个regexp来转义反斜杠,或使用str.encode('unicode-escape')。

为了避免特殊字符转换,可以使用lambda函数:

print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', lambda x: r'D:\\folder\1', r'C:\Some\Path\Data\File.txt')    

我猜这是转义
\f
。不幸的是,
\1
之前的值是一个变量。您可以始终使用另一个regexp来转义变量字符串中的反斜杠。str.encode('unicode-escape')可能也会有所帮助。啊,真漂亮!这应该适用于任何输入。谢谢PS-您可能想将其添加到您的答案中:-)Hmm在re对象
re.escape(r'D:\folder')+r'\1'
上找到了一个转义方法,但它会输出
D\:\\folder\1
。我不知道它为什么要转义冒号…它转义冒号是因为它是非字母数字字符(请参阅),可能是为了避免被误解为特殊的regexp字符。