using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; public class Test { public static void Main() { var text = "{token1:param1}stuff{token2}more stuff{token3:param3}"; var pattern = @"\{(?[^:}]*)(?::(?[^}]*))?}"; var matches = Regex.Matches(text, pattern); foreach (Match m in matches) { Console.WriteLine(m.Value); Console.WriteLine(m.Groups["key"].Value); Console.WriteLine(m.Groups["value"].Value); } } }