Используйте Lookup class:
Regex template = new Regex(@"\{(?<key>.+?)\}(?<value>[^{}]*)");
ILookup<string, string> dictionary = template.Matches(MyString)
.Cast<Match>()
.ToLookup(x => x.Groups["key"].Value, x => x.Groups["value"].Value);
EDIT: Если вы ожидаете получить «простой» набор результатов (например, {key1, value1}
, {key1, value2}
, {key2, value2}
вместо {key1, {value1, value2} }, {key2, {value2} }
) вы можете получить результат типа IEnumerable<KeyValuePair<string, string>>
:
Regex template = new Regex(@"\{(?<key>.+?)\}(?<value>[^{}]*)");
ILookup<string, string> dictionary = template.Matches(MyString)
.Cast<Match>()
.Select(x =>
new KeyValuePair<string, string>(
x.Groups["key"].Value,
x.Groups["value"].Value
)
);