2011-05-17 52 views
1

有了這個代碼,我得到:蟒蛇正則表達式剔除了反斜線

newContent='asdf asdf \nOUTPUT_DIRECTORY  = working\topOnly' 

我希望它是:

newContent='asdf asdf \nOUTPUT_DIRECTORY  = working\\topOnly' 

的REG EX是"""working""""""topOnly"""間剝離出一"""\"""。如果我執行類似"""valStr = 'working\\ytopOnly'"""的操作,則按預期工作。

我需要在我的代碼中更改哪些內容才能達到預期效果?

import re 

valStr = 'working\\topOnly' 
cmdFileContent = 'asdf asdf \nOUTPUT_DIRECTORY  = asdf' 
name = 'OUTPUT_DIRECTORY' 

varRegEx = r""" 
    (\n   #match new line 
    %s   #var 
    \s*   #skip white spaces 
    = 
    \s?)   #skip white spaces 
    (.*)   #match and store rest of line 
    """%name 

newContent = re.compile(varRegEx, re.VERBOSE).sub(r'\1%s'%valStr, cmdFileContent) 
+0

真實和預期的輸出是相同的問題,請編輯它。 – utdemir 2011-05-17 18:24:40

回答

1

的應用re.sub幫助說:

REPL可以是一個字符串或調用的對象;如果一個字符串,它的反斜槓轉義處理。

,因爲它是在做自己的加工逃逸層,則需要另一層逃逸:

newContent = re.compile(varRegEx, re.VERBOSE).sub(r'\1%s'%valStr.replace('\\', '\\\\'), cmdFileContent) 
+0

工作。謝謝!!!! – brian 2011-05-18 12:24:49

0

無關具有reg-EXP都沒有。試試這個:

valStr = 'working\\topOnly' 
print valStr 

你認爲print被「剔除」你回斜線過嗎?也許這是一個陰謀!

它只是Python解析器本身。與幾乎所有語言解析器一樣,它將反斜線視爲轉義,因此g\\t表示g-backslash-t,而g\t表示「g-tab」。嘗試

valStr = 'working\\\\topOnly' 
+0

我的IDE顯示字符串的repr版本。 Mu Mind解決方案有效。感謝您的幫助 – brian 2011-05-18 12:33:01