Python正则表达式为函数调用添加参数

时间:2012-03-03 20:39:46

标签: python regex

我想使用python regex为c文件中所有函数调用添加一个参数:

ret = func(a) 应替换为: ret = func(a, newparam)

我还需要能够处理这样的情况: ret = func(func2(b)) 应替换为: ret = func(func2(b), newparam)

提前致谢

2 个答案:

答案 0 :(得分:0)

正则表达式是语言中的一种语言 - 所以,虽然用正则表达式做你想做的事情肯定是可能的,但这是不值得的。如果没有别的,你会失去可读性和可维护性,除了必须考虑更多只是为了让它在第一次放置。

它可以安全地在Python上完成,无需使用正则表达式,因为您可以完全控制添加新参数的位置。

如果没有对func的调用在多行源代码中被破坏,则下面的代码可以这样做:

add_parm_func = "func"
parm_to_add = "newparam"

def change(line):
    start = line.find(add_parm_func) + len(add_parm_func)
    res = line[:start]
    open_paren = 0
    for i, chr in enumerate(line[start:])
        if chr == "(":
            open_paren += 1
        elif chr == ")":
            open_paren -= 1
            if open_paren == 0:
                res += ", %s )" % parm_to_add
                break
        res += chr
    res += line[start + i:]
    return res

with open("sourcefile.c") as src, open("destfile.c") as dst:
    for line in src:
        if add_parm_func in line:
            line = change(line)

        dst.write(line)

答案 1 :(得分:0)

为什么不重构代码以将func重命名为func_new来执行以下操作:

def func_new(foo):
    return func(foo, newparam)

newparam全球可用。它更清洁,不需要太多努力。