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メソッドを使うと、グループ番号に対応するグループ名、またその逆対応を取得することをできます。