using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
string messageTemplate = "Milestone \"%Milestone%\" has been reassigned from %OLD_OWNER% to %NEW_OWNER%.";
MacroData macroData = new MacroData();
macroData.AddValue("Milestone", "Notification message body text replacement");
macroData.AddValue("Old_Owner", "Brian");
macroData.AddValue("New_Owner", "Satish");
string filledInTemplate = new TemplateBuilder(messageTemplate, macroData).FillInTemplate();
Console.WriteLine(filledInTemplate);
public class TemplateBuilder
private static Regex templateMacroRegex = new Regex(@"%(?<key>[A-z_\-]+)%");
private string _template;
public TemplateBuilder(string messageTemplate, MacroData data)
_template = messageTemplate;
public string FillInTemplate()
MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceCC);
return templateMacroRegex.Replace(_template, myEvaluator);
public string ReplaceCC(Match m)
string macroName = m.Groups["key"].Value;
return _data.GetValueForMacro(macroName);
Dictionary<string, string> _data = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
public void AddValue(String key, string val)
public string GetValueForMacro(string macroName)
if (_data.TryGetValue(macroName, out val))