2018.4.24
2020.1.7

正規表現のパターンマッチ(Regex)で検索した部分文字列の取得

正規表現のパターンマッチ(Regex)で文字列を検索する場合、結構な割合で()で括った部分式で文字列をキャプチャするのですが、C#でやるのは今回が初めてだったのでメモしておきます。

コード

以下は、URLから部分文字列としてidを取得するコードになります。


var str = "http://localhost/example/123";
var m = System.Text.RegularExpressions.Regex.Match(str, @"^.*/example/(?<id>[0-9]+)/?$");
if (!m.Success) return;

Console.WriteLine(m.Value);                 // http://localhost/example/123
Console.WriteLine(m.Groups[0].Value);       // http://localhost/example/123
Console.WriteLine(m.Groups[1].Value);       // 123
Console.WriteLine(m.Groups["id"].Value);    // 123

「?<id>」はキャプチャした部分文字列に配列のインデックスではなく、名前でアクセスできるようになります。インデックスでのアクセスだけでよければ不要です。

正規表現全体に一致する文字列はValueで取得できますが、部分式でキャプチャした文字列については、Groupsという構造体に格納されています。

探し方が悪かったのか、キャプチャした文字列をこのGroupsでアクセスできることが、なかなか分かりませんでした。

参考リンク

C#】関連記事