我得到了一个可能看起来像这样的字符串
"myFunc('element','node','elementVersion','ext',12,0,0)"
我目前正在使用检查有效性,效果很好
myFunc\((.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\)
现在我想替换第三个参数中的任何字符串。 不幸的是,我不能只在第 3 个位置的任何子字符串上使用字符串替换,因为相同的“子字符串”可能位于该字符串中的其他任何位置。
有了这个和一个 re.findall,
myFunc\(.+?\,.+?\,(.+?)\,.+?\,.+?\,.+?\,.+?\)
我能够在第 3 个位置获取子字符串的内容,但 re.sub 不会替换字符串它只是返回我想要替换的字符串:/
这是我的代码
myRe = re.compile(r"myFunc\(.+?\,.+?\,(.+?)\,.+?\,.+?\,.+?\,.+?\)")
val = "myFunc('element','node','elementVersion','ext',12,0,0)"
print myRe.findall(val)
print myRe.sub("noVersion",val)
知道我错过了什么吗?
谢谢! 塞布
最佳答案
在 re.sub 中,您需要为整个匹配字符串指定一个替换。这意味着您需要重复您不想更换的部件。这有效:
myRe = re.compile(r"(myFunc\(.+?\,.+?\,)(.+?)(\,.+?\,.+?\,.+?\,.+?\))")
print myRe.sub(r'\1"noversion"\3', val)
关于python正则表达式替换匹配字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4489074/