Python:使用regexp进行程序翻译

时间:2017-08-31 09:53:13

标签: python regex

我有一个字符串代码= 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}

1 个答案:

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