2011-05-17 50 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