Match・Group・Captureの各内容をツリー形式で表示する 言語: C# Match・Group・Captureと、実際にマッチする部分をツリー形式で表すと次のようになります。 カッコ内は入力文字列中におけるマッチした部分のインデックスとその長さです。 Match・Group・Captureの各内容をツリー形式で表示する すべて選択してコピー ダウンロード 行番号を表示する using System; using System.Text.RegularExpressions; class Sample { static void Main() { var text = @"xcopy C:\test D:\target\backup\files"; var pattern = @"([A-Z]:)(\\[^\\ ]+)+"; Console.WriteLine("Regex: {0}", pattern); Console.WriteLine("Input: {0}", text); Console.WriteLine(); PrintMatch(Regex.Matches(text, pattern)); } static void PrintMatch(MatchCollection matches) { for (var i = 0; i < matches.Count; i++) { Match m = matches[i]; Console.WriteLine("Match[{0}] {1,-25} ({2}+{3})", i, m.Value, m.Index, m.Length); PrintGroup(m.Groups); Console.WriteLine(); } } static void PrintGroup(GroupCollection groups) { for (var i = 0; i < groups.Count; i++) { Group g = groups[i]; Console.WriteLine(" Group[{0}] {1,-25} ({2}+{3})", i, g.Value, g.Index, g.Length); PrintCapture(g.Captures); } } static void PrintCapture(CaptureCollection captures) { for (var i = 0; i < captures.Count; i++) { Capture c = captures[i]; Console.WriteLine(" Capture[{0}] {1,-25} ({2}+{3})", i, c.Value, c.Index, c.Length); } } } 実行結果 Regex: ([A-Z]:)(\\[^\\ ]+)+ Input: xcopy C:\test D:\target\backup\files Match[0] C:\test (6+7) Group[0] C:\test (6+7) Capture[0] C:\test (6+7) Group[1] C: (6+2) Capture[0] C: (6+2) Group[2] \test (8+5) Capture[0] \test (8+5) Match[1] D:\target\backup\files (14+22) Group[0] D:\target\backup\files (14+22) Capture[0] D:\target\backup\files (14+22) Group[1] D: (14+2) Capture[0] D: (14+2) Group[2] \files (30+6) Capture[0] \target (16+7) Capture[1] \backup (23+7) Capture[2] \files (30+6) 関連するページ Group.Nameプロパティでグループの名前を取得する Group.Capturesプロパティを参照して正規表現の部分式にマッチした箇所を列挙する グループ化した正規表現とキャプチャを使ってCSV文字列から各カラムの値を取得する Match/Group/CaptureCollectionは非ジェネリックなIEnumeratorを返すため暗黙的な型指定ではobjectとして列挙される Match/Group/CaptureCollectionをIReadOnlyList<Match/Group/Capture>インターフェイスを介して列挙する IReadOnlyDictionaryインターフェイスを介してGroupCollectionを列挙する GroupCollection.TryGetValueメソッドを使って正規表現にマッチした場合にグループ化した箇所を取得する