C#で正規表現を使って抽出した文字列から一部を取り出す
C#で正規表現を使って抽出した文字列の中から、さらに一部の文字列を抽出します。正規表現そのものについては、MSDNの.NET Framework の正規表現を参考にしてください。
目次
正規表現のグループ
検索パターンを括弧でくくると、その括弧内のパターンに一致した文字列をグループとして取り出せるようになります。各グループを取り出すためには、Regex.Match()メソッドで得られたMatchクラスのインスタンスのGroupsプロパティを参照します。Groupsプロパティはコレクションになっているので、角括弧を付けてアクセスすると各要素の値を参照できます。 これを使って、パターンに一致して抽出した文字列からさらに文字列を抽出できます。
試してみた
コードを見た方がわかりやすいかもしれません。 下記の例は、英小文字をaからzまで順番に並べた文字列からdで始まりtで終わる文字列を抜き出し、さらにその中からfで始まりiで終わる文字列とmで始まりrで終わる文字列を抜き出します。
using System;
using System.Text.RegularExpressions;
namespace regex_trial3
{
class Program
{
static void Main(string[] args)
{
string kotoba = "abcdefghijklmnopqrstuvwxyz";
Match matchedObject = Regex.Match(kotoba, @"d.*(f.*i).*(m.*r).*t");
Console.WriteLine("No group indicated :" + matchedObject.Value);
Console.WriteLine("Groups[0] : " + matchedObject.Groups[0].Value);
Console.WriteLine("Groups[1] : " + matchedObject.Groups[1].Value);
Console.WriteLine("Groups[2] : " + matchedObject.Groups[2].Value);
}
}
}
f.*i
が一つ目のグループ、m.*r
が二つ目のグループですね。
出力結果は下記のようになります。
No group indicated :defghijklmnopqrst
Groups[0] : defghijklmnopqrst
Groups[1] : fghi
Groups[2] : mnopqr
Match.Groupsプロパティを参照しない場合は検索結果全体が、Groups[0]
も検索結果全体が、Groups[1]
は1つ目の括弧にマッチする部分が、Groups[2]
は2つ目の括弧にマッチする部分が得られます。
この投稿で試した環境は下記です。
Visual Studio 2015 Express for Windows Desktop (C#)
公開日
広告