1

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

这是一个例子。

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

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

我尝试了 ^\t 之类的东西,有不同的变化,尝试了 ^\s\s\s\s。我认为这很简单,但我尝试过的任何东西似乎都与标签不匹配。

我究竟做错了什么?

谢谢!

编辑

我直接从VS复制到TextBox1。

在此处输入图像描述

如您所见, TextBox 值中没有实际的制表符 (\t),这是问题的根源。正如我在评论中指出的那样,带有 ^ 的空格确实有效(仅适用于第一行)。

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

4

2 回答 2

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 窗体版本:

默认.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>

默认.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");
}

星号只是为了方便查看选项卡已正确替换为空格。将 更改'*'' '以获取空格而不是星号。

于 2012-07-29T21:51:22.120 回答
0
string text = "\tHello World";
string replacedTabWith4Spaces = text.Replace("\t", "    ");
于 2012-07-29T21:57:30.247 回答