キャプチャを使った例として、カンマ区切り文字列(CSV)から各カラムの値を分割して取得する例を考えます。
次の例で使用している正規表現((^|,)(?<column>[^,]*))+
では、行頭またはカンマ(^|,)
に続いて、グループ名column
でグループ化した正規表現(?<column>[^,]*)
が現れる箇所の組み合わせが、1つ以上連続する箇所(...)+
をCSVにマッチする正規表現として構成しています。
そして、グループcolumn
では、カンマ以外の文字が0文字以上連続する箇所[^,]*
をカラムの値として構成しています。 この一連の正規表現にマッチする文字列を取得し、グループcolumn
にキャプチャされた文字列を列挙すれば、CSVの各カラムの値を取得できることになります。
グループ化した正規表現とキャプチャを使ってCSV文字列から各カラムの値を取得する
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = "a,012,,xxxxx";
// CSVの正規表現(グループcolumnにCSVの各カラムの値がキャプチャされる)
var m = Regex.Match(text, @"((^|,)(?<column>[^,]*))+");
// グループcolumnの正規表現にキャプチャされた数を表示
Console.WriteLine("Count = {0}", m.Groups["column"].Captures.Count);
// グループcolumnにキャプチャされた文字列を列挙して表示
foreach (Capture c in m.Groups["column"].Captures) {
Console.WriteLine("\"{0}\"", c.Value);
}
}
}
実行結果
Count = 4 "a" "012" "" "xxxxx"
この例で使用している正規表現では、クォーテーション("
や'
)によって括られたカラムを処理することができません。 CSVをより厳密に処理するバージョンについては§.グループとキャプチャを使った例 (CSVの処理)で紹介しています。