Python:使用regexp进行程序翻译
我有一个字符串code=Python:使用regexp进行程序翻译,python,regex,Python,Regex,我有一个字符串code=函数add($n,m){\t返回n+$m;\t}和一个列表args=[“n”,“m”]。我需要在代码中的参数前面填充缺少的$ def programTranslation(code, args): argumentVariants = '|'.join(args) pattern = ??? repl = ??? return re.sub(pattern, repl, code) 最后的代码必须是函数add($n,$m){\t返回$n+
函数add($n,m){\t返回n+$m;\t}
和一个列表args=[“n”,“m”]
。我需要在代码中的参数前面填充缺少的$
def programTranslation(code, args):
argumentVariants = '|'.join(args)
pattern = ???
repl = ???
return re.sub(pattern, repl, code)
最后的代码必须是
函数add($n,$m){\t返回$n+$m;\t}
您可以将正则表达式与替换函数一起使用。这稍微复杂一些,因为:
- 您需要单词边界(否则
fromn
将获得“add$”处理)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; }