2017-04-06 6 views
1

文字列のパターンをキャプチャされたグループに置き換えようとしていますが、直接は置き換えようとしていません。キャプチャされたグループの値は、キャプチャされたグループ自体によってキーが付けられたディクショナリに存在します。どうすればこれを達成できますか?C#正規表現に一致するパターンをキャプチャされたグループに置き換えます。

string body = "hello [context.world]!! hello [context.anotherworld]"; 
Dictionary<string, string> dyn = new Dictionary<string, string>(){ {"world", "earth"}, {"anotherworld", "mars"}}; 
Console.WriteLine(Regex.Replace(body, @"\[context\.(\w+)\]", dyn["$1"])); 

を私は$ 1は辞書ルックアップ中に文字通りに解釈なっていることを私に示しKeyNotFoundExceptionを得続ける:

は、これは私がしようとしているものです。あなたはこのような試合の評価者に試合を渡す必要が

答えて

3

string body = "hello [context.world]!! hello [context.anotherworld] and [context.text]"; 
Dictionary<string, string> dyn = new Dictionary<string, string>(){ 
      {"world", "earth"}, {"anotherworld", "mars"} 
}; 
Console.WriteLine(Regex.Replace(body, @"\[context\.(\w+)]", 
     m => dyn.ContainsKey(m.Groups[1].Value) ? dyn[m.Groups[1].Value] : m.Value)); 

online C# demoを参照してください。

辞書にキーが最初に含まれているかどうかを確認します。そうでない場合は、マッチを再挿入し、そうでなければ、対応する値を返します。

+1

は完全に機能します。ありがとう – user949110

関連する問題