Regex.Replaceメソッドでは、引数に正規表現と置換後の文字列を指定することによって、正規表現にマッチした箇所を別の文字列へと置き換えることができます。
次の例では、正規表現\..*
にマッチする箇所を新しい文字列.bak
に置換することにより、ファイル名の拡張子をすべて.bak
に変更しています。
Regex.Replaceメソッドを使って正規表現にマッチする箇所を別の文字列に置き換える
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);
// 正規表現を用いてファイル名の拡張子に該当する箇所を".bak"に置き換える
var bakFile = Regex.Replace(file, @"\..*", ".bak");
Console.WriteLine(bakFile);
}
}
}
実行結果
sample.txt => sample.bak sample.txt.bak => sample.bak sample.cs => sample.bak test.txt => test.bak test.jpeg => test.bak README => README
Regex.Replaceメソッドでは、置換後の文字列において$
で始まる文字列が正規表現要素として解釈される場合があります。 正規表現要素として解釈されないようにするには、$
を$$
とエスケープする必要があります。 Regex.Replaceメソッドで$
を含む文字列へと置換する場合は注意してください。
置換の正規表現要素については後述の§.マッチした文字列への置換 (置換の正規表現要素)および.NET Frameworkで使用できる正規表現 §.置換を参照してください。
Match.Resultメソッドを用いることでもマッチ箇所の置換をおこなうことができます。 詳しくは正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.Match.Resultメソッドで解説しています。
パスやファイル名の拡張子部分を置換するにはPath.ChangeExtensionメソッドを使うこともできます。