python正则表达式替换匹配字符串的一部分

标签 python regex string

我得到了一个可能看起来像这样的字符串

"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/

相关文章:

tsql - T-SQL : How to obtain the exact length of a string in characters?

javascript - 在 JavaScript 中,符号/\s*;\s*/是什么意思?

jquery - 数据表精确单词搜索

java - 如何检查 JTextField 文本到字符串?

python - 如何从名为section的标签中提取数据

python - 如何提取字符串中间的邮政编码?

python - 下载 youtube mp3 - 元数据编码问题(python、youtube-dl、ffmpeg)

python - 调用类变量时打印消息

javascript - 我想删除除 "."之外的所有非数字和所有标点符号

python - 使用 python 从字符串中获取电子邮件 ID 的最佳方法