我有一个字符串代码= function add($n, m) {\t return n + $m;\t}
和一个列表args=["n", "m"]
。我需要在代码中的参数前填充缺少的$
。
def programTranslation(code, args):
argumentVariants = '|'.join(args)
pattern = ???
repl = ???
return re.sub(pattern, repl, code)
最终代码必须为function add($n, $m) {\t return $n + $m;\t}
。
答案 0 :(得分:1)
您可以使用具有替换功能的正则表达式。这稍微复杂一点,因为:
n
的{{1}}获得“添加$”处理)return
,则必须避免添加$
。$
,如果它在这里,否则你不知道是否必须添加它(我更喜欢匹配它,如果找到则将其删除,并在所有情况下前置$
) 我的建议:
import re
code = "function add($n, m) {\t return n + $m;\t}"
def program_translation(code,args):
pattern = r"({})".format("|".join(r"([\$]|\b){}\b".format(a) for a in args))
return re.sub(pattern,lambda m:"$"+m.group(1).lstrip("$"),code)
print(program_translation(code,['n','m']))
为清楚起见,生成的模式为:
(([\$]|\b)n\b|([\$]|\b)m\b)
输出:
function add($n, $m) { return $n + $m; }