This should do what you want:
Regex regex = new Regex(@"^\t+", RegexOptions.Multiline);
s = regex.Replace(s, m => new string(' ', 4 * m.Value.Length));
See it online: ideone
Update
Here's a version for ASP.NET Web Forms that runs in Visual Web Developer 2010 Express:
Default.aspx
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"></asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:TextBox ID="TextBox1" runat="server" Height="99px" Width="500px" TextMode="MultiLine"></asp:TextBox>
</asp:Content>
Default.aspx.cs
using System;
using System.Text.RegularExpressions;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
string code = "protected void Page_Load(object sender, EventArgs e)\n{\n\tResponse.Write(\"Hello World\");\n}";
Regex regex = new Regex(@"^\t+", RegexOptions.Multiline);
TextBox1.Text = regex.Replace(code, m => new string('*', 4 * m.Value.Length));
}
}
}
Result after clicking button:
protected void Page_Load(object sender, EventArgs e)
{
****Response.Write("Hello World");
}
The asterisks are there only to make it easy to see that the tabs have been replaced correctly with spaces. Change the '*' to ' ' to get spaces instead of asterisks.
\n\treplaced with\nor check you have Multiline mode on in your Regex