Regex.GetGroupNumbersメソッドおよびRegex.GetGroupNamesメソッドを使用すると、正規表現内で定義されているグループ番号・グループ名の一覧を取得することができます。 このメソッドはインスタンスメソッドであるため、インスタンス化された正規表現に対してのみ使用できます。

GetGroupNumbersメソッドでは、正規表現内のすべてのグループの番号が返されます。 このメソッドでは、グループが名前付きグループかどうかに関わらず割り当てられているグループ番号が返されます。

GetGroupNamesメソッドでは、正規表現内のグループが名前付きグループの場合はその名前、そうでない場合は文字列形式のグループ番号が返されます。

どちらのメソッドの場合も、正規表現内にグループがあるかないかに関わらず、マッチ全体を表すグループ番号``0``が常に結果に含まれます。

Regex.GetGroupNumbers/GetGroupNamesメソッドで正規表現内で定義されているすべてのグループ番号/グループ名を取得する
Imports System
Imports System.Text.RegularExpressions

Class Sample
  Shared Sub Main()
    Dim pattern As String = "(?<year>\d{4})-(?<month>\d{2})-(\d{2})" ' yyyy-mm-dd

    ' GetGroupNumbers/GetGroupNamesメソッドはインスタンスメソッドであるため、
    ' インスタンス化された正規表現に対してのみ使用できる
    Dim re As New Regex(pattern)

    ' GetGroupNumbersメソッドで正規表現内のグループ番号を取得する
    Console.WriteLine("group numbers: {0}", String.Join(", ", re.GetGroupNumbers()))

    ' GetGroupNamesメソッドで正規表現内のグループ名を取得する
    ' (名前付きグループの場合はその名前、そうでない場合は文字列形式のグループ番号が返される)
    Console.WriteLine("group names: {0}", String.Join(", ", re.GetGroupNames()))
  End Sub
End Class
実行結果
group numbers: 0, 1, 2, 3
group names: 0, 1, year, month

Regex.GroupNameFromNumber/GroupNumberFromNameメソッドを使うと、グループ番号に対応するグループ名、またその逆対応を取得することをできます。