我正在研究用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。
正如您所看到的,TextBox值中的没有实际标签(\ t),这是问题的根源。正如我的评论中所指出的那样,^的空格确实有效(仅限第一行)。
所以我的最终正则表达式看起来像......:“\ s \ s \ s \ s”。
答案 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", " ");