Match.Resultメソッドは、マッチした箇所を引数で指定した文字列に置き換えます。 このメソッドは置換文字列によってマッチ箇所を別の文字列に置き換えた結果を取得するために使うことができます。
Regex.Replaceメソッドで置換文字列を指定した場合、元の文字列全体に同一の置換文字列を適用した結果が返されます。 一方Match.Resultメソッドでは、マッチした箇所ごとに置換文字列を指定して置換した結果を取得することができます。
次の例では、文字列中にある mm/dd/yyyy 形式の日付部分を探索し、Match.Resultメソッドを使って yyyy-mm-dd の形式に置換して表示しています。 正規表現(?<y>...)
でグループ化した部分は置換文字列${y}
によって取得することができるため、これを使って日付の年月日の順序を変えています。 また、比較としてRegex.Replaceメソッドを使って置換した場合も併記しています。
Match.Resultメソッドを使ってmm/dd/yyyy形式の日付部分をyyyy-mm-dd形式に置換する
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = "02/29/2016 00:00:00";
// mm/dd/yyyy形式の日付 (月日年の正規表現をそれぞれグループ名m, d, yでグループ化)
var pattern = @"(?<m>\d{2})/(?<d>\d{2})/(?<y>\d{4})";
var m = Regex.Match(text, pattern);
// マッチした部分をyyyy-mm-ddの形式に置換した結果を表示
// (グループm, d, yにマッチした箇所をy-m-dの順で表示)
Console.WriteLine(m.Result("${y}-${m}-${d}"));
// 上記と同じ結果を生成するコード
Console.WriteLine(m.Groups["y"].Value + "-" + m.Groups["m"].Value + "-" + m.Groups["d"].Value);
// (Regex.Replaceメソッドでは、入力文字列全体に対して置換が行われる)
Console.WriteLine(Regex.Replace(text, pattern, "${y}-${m}-${d}"));
}
}
実行結果
2016-02-29 2016-02-29 2016-02-29 00:00:00
グループ化およびグループ化した部分の置換については後述の§.グループ化とグループ番号および§.グループと置換文字列も合わせて参照してください。
マッチする箇所がない状態(SuccessプロパティがFalse
)のMatchインスタンスに対してResultメソッドを呼び出した場合、例外NotSupportedExceptionがスローされます。
置換文字列を使った置換については正規表現によるパターンマッチングと文字列操作 §.マッチした文字列への置換 (置換の正規表現要素)、置換文字列として使用できる置換の正規表現要素については.NET Frameworkで使用できる正規表現 §.置換を参照してください。