我想使用python regex为c文件中所有函数调用添加一个参数:
ret = func(a)
应替换为:
ret = func(a, newparam)
我还需要能够处理这样的情况:
ret = func(func2(b))
应替换为:
ret = func(func2(b), newparam)
提前致谢
答案 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
全球可用。它更清洁,不需要太多努力。