以下のコードは一致を取得し、groupValues コレクションに基づいて置換文字列を作成します。このコレクションは、グループ インデックスとその値を置き換えるテキストを指定します。
他のソリューションとは異なり、一致全体をグループに含める必要はなく、一致の一部のみをグループに含める必要があります。
public static string ReplaceGroups(Match match, Dictionary<int, string> groupValues)
{
StringBuilder result = new StringBuilder();
int currentIndex = 0;
int offset = 0;
foreach (KeyValuePair<int, string> replaceGroup in groupValues.OrderBy(x => x.Key))
{
Group group = match.Groups[replaceGroup.Key];
if (currentIndex < group.Index)
{
result.Append(match.Value.Substring(currentIndex, group.Index - match.Index - currentIndex));
}
result.Append(replaceGroup.Value);
offset += replaceGroup.Value.Length - group.Length;
currentIndex = group.Index - match.Index + group.Length;
}
return result.ToString();
}