查找选项卡或4个空格(在C#代码中)

时间:2012-07-29 21:44:25

标签: c# regex

我正在研究用HTML格式化C#代码。我正在尝试用4个空格替换制表符/缩进。

这是一个例子。

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello World");
}

我需要在Response.Write之前用4个空格替换选项卡。

我尝试过^ \ t这样的东西,有不同的变化,试过^ \ s \ s \ s \ s。我认为这很简单,但我尝试过的东西似乎与标签不相符。

我做错了什么?

谢谢!

修改

我直接从VS复制到TextBox1。

enter image description here

正如您所看到的,TextBox值中的没有实际标签(\ t),这是问题的根源。正如我的评论中所指出的那样,^的空格确实有效(仅限第一行)。

所以我的最终正则表达式看起来像......:“\ s \ s \ s \ s”。

2 个答案:

答案 0 :(得分:4)

这应该做你想要的:

Regex regex = new Regex(@"^\t+", RegexOptions.Multiline);
s = regex.Replace(s, m => new string(' ', 4 * m.Value.Length));

在线查看:ideone


<强>更新

这是在Visual Web Developer 2010 Express中运行的ASP.NET Web窗体的一个版本:

<强> 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));
        }
    }
}

点击按钮后的结果:

protected void Page_Load(object sender, EventArgs e)
{
****Response.Write("Hello World");
}

星号只是为了让人们很容易看到标签已经用空格正确替换。将'*'更改为' '以获取空格而不是星号。

答案 1 :(得分:0)

string text = "\tHello World";
string replacedTabWith4Spaces = text.Replace("\t", "    ");