Regex.Replaceメソッドでは、置換後の文字列も正規表現として解釈されます。 具体的には、置換文字列中の$で始まる文字列が置換の正規表現要素と解釈されます。 これを用いると、正規表現にマッチした文字列を全く別の文字列に置き換えるだけでなく、元の文字列を使った別の文字列に置き換えることができます。

置換の正規表現要素の一例として、$0は正規表現にマッチした文字列へと置き換えられます。 次の例では、拡張子の正規表現にマッチした箇所($0)に".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, @"\..*", "$0.bak");

      Console.WriteLine(bakFile);
    }
  }
}
実行結果
sample.txt           => sample.txt.bak
sample.txt.bak       => sample.txt.bak.bak
sample.cs            => sample.cs.bak
test.txt             => test.txt.bak
test.jpeg            => test.jpeg.bak
README               => README

Match.Resultメソッドを用いることでも置換の正規表現要素を使った置換をおこなうことができます。 詳しくは正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.Match.Resultメソッドで解説しています。