使用此代码我得到:
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 :(得分:1)
re.sub的帮助说:
repl可以是字符串也可以是可调用的;如果处理了字符串,则反斜杠转义。
由于它正在执行自己的处理转义层,因此您需要另一个转义层:
newContent = re.compile(varRegEx, re.VERBOSE).sub(r'\1%s'%valStr.replace('\\', '\\\\'), cmdFileContent)
答案 1 :(得分:0)
与reg-exp完全无关。试试这个:
valStr = 'working\\topOnly'
print valStr
您认为print
是否正在“剥离”您的反斜杠之一?也许这是一个阴谋!
这只是Python解析器本身。像几乎每个语言解析器一样,它将反斜杠视为转义,因此g\\t
表示g-backslash-t,而g\t
表示'g-tab'。尝试
valStr = 'working\\\\topOnly'