Group.Nameプロパティを参照すると、対応するグループ名を取得することができます。 Groupが名前を持たないグループを表す場合、Nameプロパティはグループ名の代わりにグループ番号を文字列形式で返します。 また、Groupがマッチ全体を表すグループを表す場合も、グループ番号0
を文字列形式で返します。
Group.Nameプロパティは、.NET Framework 4.7以降・.NET Standard 2.1以降で使用することができます。 それ以前のバージョンではGroupインスタンスから直接グループ名を取得することはできないため、Regex.GroupNameFromNumberメソッドを使うなどする必要があります。
Group.Nameプロパティでグループの名前を取得する .NET Standard 2.1/.NET Framework 4.7
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = "2016-02-29";
var pattern = @"(?<year>\d{4})-(?<month>\d{2})-(\d{2})"; // yyyy-mm-dd
var re = new Regex(pattern);
var m = re.Match(text);
if (m.Success) {
foreach (Group g in m.Groups) {
// Nameプロパティでマッチ元となったグループ名を取得する
Console.WriteLine($"{g.Name} => {g.Value}");
}
Console.WriteLine();
// .NET Framework 4.7/.NET Standard 2.1より前のバージョンではNameプロパティが存在しないため、
// Regex.GroupNameFromNumberメソッドを使ってグループ番号からグループ名を取得する必要がある
for (var number = 0; number < m.Groups.Count; number++) {
Console.WriteLine($"{re.GroupNameFromNumber(number)} => {m.Groups[number].Value}");
}
}
}
}
実行結果
0 => 2016-02-29 1 => 29 year => 2016 month => 02 0 => 2016-02-29 1 => 29 year => 2016 month => 02