2017-08-31 3 views
-1

私は文字列コード= function add($n, m) {\t return n + $m;\t}とリストargs=["n", "m"]を持っています。私はコードの引数の前に逃した$を記入する必要があります。Python:regexpを使ったプログラム変換

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

置き換え機能を持つ正規表現を使用できます。あなたは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; } 
    
  • 関連する問題