2012-03-15 60 views
3

嘗試使用原始字符串的反斜槓正則表達式:原始字符串使用的是Windows文件夾路徑

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被解釋。有沒有辦法使這項工作不轉化爲正斜槓?

回答

2

re.sub解釋替換字符串中的轉義序列(docs)。添加一個額外的反斜槓使用\ F之前轉義反斜槓,似乎這樣的伎倆:

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

如果替換字符串是動態的,你總是可以使用正則表達式的另一個逃跑反斜槓,或使用str.encode('的unicode -逃逸')。

+0

我想這是逃避'\ F'。不幸的是,對於我來說'\ 1'之前的值是一個變量。 – 2012-03-15 06:55:05

+0

您總是可以使用另一個正則表達式在變量字符串中轉義反斜槓。 str.encode('unicode-escape')也可能有一些幫助。 – AerandiR 2012-03-15 07:11:59

+0

啊美麗!這應該適用於任何輸入。謝謝!! PS - 你可能想添加到你的答案:-) – 2012-03-15 07:15:48

1

爲了避免特殊字符的翻譯,你可以使用拉姆達功能:

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