Не прямой ответ на ваш вопрос о регулярных выражениях, но если я правильно вас понимаю, есть более простой способ сделать это:
string baseString = "I have a {0} {1} in my {0} {2}.";
List<string> words = new List<string>() { "red", "cat", "hat" };
string outputString = String.Format(baseString, words.ToArray());
outputString
будет I have a red cat in my red hat.
.
Разве это не то, что вы хотите, или есть еще вопрос, который мне не хватает?
Незначительная разработка
String.Format
использует следующие Подпись:
string Format(string format, params object[] values)
В опциях params
есть что-то, что вы можете либо перечислить значения отдельно:
var a = String.Format("...", valueA, valueB, valueC);
, но вы также можете передать массив непосредственно:
var a = String.Format("...", valueArray);
Обратите внимание, что вы не можете смешивать и сопоставлять два подхода.