C#で正規表現を使って抽出した文字列から一部を取り出す

C#で正規表現を使って抽出した文字列の中から、さらに一部の文字列を抽出します。正規表現そのものについては、MSDNの.NET Framework の正規表現を参考にしてください。

目次

  1. 正規表現のグループ
  2. 試してみた

正規表現のグループ

検索パターンを括弧でくくると、その括弧内のパターンに一致した文字列をグループとして取り出せるようになります。各グループを取り出すためには、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#)

公開日

広告