正規表現要素(?<name>)を使うと、正規表現のグループ化と同時に名前を与えることができます。 グループに名前を与えることにより、正規表現の構造を把握しやすくすることができ、またグループを参照するコードの可読性を向上させることができます。 例えば正規表現\d{4}にグループ名nameを与える場合は(?<name>\d{4})と記述します。

Match.Groupsプロパティで名前付きグループを参照する場合は、match.Groups["name"]のように、インデックスの代わりにグループに与えた名前を文字列で指定します。 このようにすることで、名前を付けてグループ化した部分の正規表現にマッチした部分を個別に参照することができます。

グループ名が与えられている場合でも、インデックスを使って個々のグループを参照することもできます。 このとき、各グループに割り当てられるグループ番号はグループ名の有無にかかわらず同じ番号が割り当てられます。

Match.Groupsプロパティと名前付きグループを使ってyyyy-mm-dd形式にマッチする文字列の年月日をそれぞれ取得する
using System;
using System.Text.RegularExpressions;

class Sample {
  static void Main()
  {
    var text = "2016-02-29";
    var pattern = @"(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})"; // yyyy-mm-dd形式の日付
    //var pattern = @"(\d{4})-(\d{2})-(\d{2})"; // 上記と同等の正規表現をグループ名なしで記述した場合

    var m = Regex.Match(text, pattern);

    // マッチした文字列のうち、グループ名'y', 'm', 'd'のそれぞれに対応する箇所を取得する
    Console.WriteLine(m.Groups["y"].Value);
    Console.WriteLine(m.Groups["m"].Value);
    Console.WriteLine(m.Groups["d"].Value);
    Console.WriteLine();

    // グループ名を与えている場合でも、各グループをインデックスで参照することもできる
    Console.WriteLine(m.Groups[1].Value);
    Console.WriteLine(m.Groups[2].Value);
    Console.WriteLine(m.Groups[3].Value);
  }
}
実行結果
2016
02
29

2016
02
29