using System.Collections.Generic;
using System.Text.RegularExpressions;
private static Dictionary<string, string> Messages
public static void Main()
Messages = new Dictionary<string, string>();
Messages.Add("abc", "Hello %bca%");
Messages.Add("ab", "Hello ");
Messages.Add("bca", "world,%cde%%dca%");
Messages.Add("cde", "how are you ");
Messages.Add("dca", "today%edc%");
Messages.Add("edc", "? %message%");
Messages.Add("extrabits", "%ab%I'm 100% good, thanks.");
Console.WriteLine(Message("notfound"));
Console.WriteLine(Message("abc"));
Console.WriteLine(Message("abc").Replace("%message%", Message("extrabits")));
Console.WriteLine(Message("alsonotfound"));
private static string Message(string code)
if (Messages.TryGetValue(code, out string message))
MatchCollection matches = new Regex(@"%[^%]*%").Matches(message);
foreach (Match match in matches)
string replacement = Message(match.ToString().Trim('%')) ?? "";
message = replacement.Length > 0 ? message.Replace(match.ToString(), replacement) : message;