Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用regexp进行程序翻译_Python_Regex - Fatal编程技术网

Python:使用regexp进行程序翻译

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+

我有一个字符串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+$m;\t}

您可以将正则表达式与替换函数一起使用。这稍微复杂一些,因为:

  • 您需要单词边界(否则
    n
    from
    return
    将获得“add$”处理)
  • 如果已有
    $
    ,则必须避免添加
  • 您需要匹配
    $
    ,如果它在这里,否则您无法知道是否必须添加它(我更喜欢匹配它,如果找到它,则将其删除,并且在所有情况下都使用
    $
    预结束)
我的建议:

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