2017-08-31 192 views
-1

我有一个字符串代码= function add($n, m) {\t return n + $m;\t}和一个列表args=["n", "m"]。我需要在代码中填充缺少的$Python:使用正则表达式编程翻译

def programTranslation(code, args): 
    argumentVariants = '|'.join(args) 
    pattern = ??? 
    repl = ??? 
    return re.sub(pattern, repl, code) 

最后的代码必须是function add($n, $m) {\t return $n + $m;\t}。 谢谢你所有的答案

回答

1

你可以使用带有替换函数的正则表达式。这是稍微复杂一点,因为:

  • 你需要字边界(否则nreturn得到“加$”处理)
  • 你必须避免加入$是否已经存在一个。
  • 你需要匹配$如果它在这里,否则你无法知道,如果你要添加它(我喜欢匹配它,消除它,如果找到,并在所有情况下由$前置)

我的建议:

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; }