Regex.Matchメソッドは、指定された文字列に対して正規表現にマッチする箇所を探索して取得します。 String.IndexOfなどのメソッドが指定された文字列の位置(インデックス)のみを返すのに対し、Regex.Matchでは指定された正規表現にマッチする文字列の位置(インデックス)と、実際にマッチした部分の文字列を返します。

Regex.Matchメソッドは、戻り値をMatchクラスとして返します。 Succsssプロパティを参照するとMatchメソッドで正規表現にマッチする文字列が見つかったかどうかを取得できます。 これはIsMatchメソッドでマッチする箇所があるかどうか判定した場合の結果と同じ値になります。

マッチする箇所があった場合、Valueプロパティを参照すると実際に正規表現にマッチした部分の文字列が取得できます。 同様に、Indexプロパティでマッチした部分の位置(インデックス)、Lengthプロパティでその長さを取得できます。

次の例では、Matchメソッドを使ってファイル名のうち拡張子の部分を探索し、マッチした場合はその拡張子を表示しています。 この例では、.(ピリオド)以降を拡張子とみなす正規表現を使っています。

(この例で使用している正規表現\..*は、「ピリオド(\.)に続けて、任意の文字(.)が、0文字以上続く(*)箇所」を表します。)

Regex.Matchメソッドを使って文字列中の正規表現にマッチする部分を取得する
using System;
using System.Text.RegularExpressions;

class Sample {
  static void Main()
  {
    var files = new string[] {
      "sample.txt",
      "sample.txt.bak",
      "sample.cs",
      "test.txt",
      "test.jpeg",
      "README",
    };

    foreach (var file in files) {
      Console.Write("{0,-20} ", file);

      // 正規表現にマッチする箇所を探索
      var m = Regex.Match(file, @"\..*");

      if (m.Success)
        // マッチする箇所があった場合、マッチした部分の文字列と、インデックス・長さを表示する
        Console.WriteLine("{0,-10} ({1}, {2})", m.Value, m.Index, m.Length);
      else
        // マッチする箇所がなかった場合
        Console.WriteLine("?");
    }
  }
}
実行結果
sample.txt           .txt       (6, 4)
sample.txt.bak       .txt.bak   (6, 8)
sample.cs            .cs        (6, 3)
test.txt             .txt       (4, 4)
test.jpeg            .jpeg      (4, 5)
README               ?

マッチした結果からグループキャプチャを参照するには、Groupsプロパティを参照します。 マッチグループキャプチャ、およびそれぞれに該当するクラスについては正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.Match・Group・Capture各クラスの関係とマッチ箇所で解説しています。

マッチした文字列・インデックスの参照のほか、Resultメソッドを使ってマッチ箇所を別の文字列に置換したりすることもできます。 また、Matchメソッドでは最初にマッチした箇所が返されますが、NextMatchメソッドを使って次のマッチ箇所を取得することもできます。 これらについて詳しくは正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.マッチ箇所の参照および操作(Matchクラス)で解説しています。

パスやファイル名から拡張子部分を抽出するにはPath.GetExtensionメソッドを使うことができます。