查找制表符或4个空格(在C#代码中)

查找制表符或4个空格(在C#代码中),c#,regex,C#,Regex,我正在用HTML格式化C#代码。我试图用4个空格替换制表符/缩进 这里有一个例子 protected void Page_Load(object sender, EventArgs e) { Response.Write("Hello World"); } 我需要在响应之前替换选项卡。用4个空格书写 我尝试了像^\t这样的东西,有不同的变体,尝试了^\s\s\s。我以为这很简单,但我试过的东西似乎都不符合标签 我做错了什么 谢谢大家! 编辑 我直接从VS复制到TextBox1 如您所

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

这里有一个例子

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello World");
}
我需要在响应之前替换选项卡。用4个空格书写

我尝试了像^\t这样的东西,有不同的变体,尝试了^\s\s\s。我以为这很简单,但我试过的东西似乎都不符合标签

我做错了什么

谢谢大家!

编辑

我直接从VS复制到TextBox1

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


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

这应该是您想要的:

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


更新

以下是在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>
单击按钮后的结果:

protected void Page_Load(object sender, EventArgs e) { ****Response.Write("Hello World"); } 受保护的无效页面加载(对象发送方、事件参数e) { ****回复。写下(“你好世界”); }
星号的存在只是为了便于查看选项卡是否已正确替换为空格。将
'*'
更改为
'
以获得空格而不是星号。

这应该可以满足您的需要:

Regex regex = new Regex(@"^\t+", RegexOptions.Multiline);
s = regex.Replace(s, m => new string(' ', 4 * m.Value.Length));
string text = "\tHello World";
string replacedTabWith4Spaces = text.Replace("\t", "    ");
在线查看:


更新

以下是在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>
单击按钮后的结果:

protected void Page_Load(object sender, EventArgs e) { ****Response.Write("Hello World"); } 受保护的无效页面加载(对象发送方、事件参数e) { ****回复。写下(“你好世界”); }

星号的存在只是为了便于查看选项卡是否已正确替换为空格。将
'*'
更改为
'
以获得空格而不是星号。

尝试将
\n\t
替换为
\n
或检查您的正则表达式中是否启用了多行模式代码中其他位置的制表符会发生什么情况?保持不变?制表符总是在字符串的开头吗?是的-制表符应该总是在开头(至少现在是这样),但我们可以暂时忘记这一点-简单的“\t”也不起作用。请尝试将
\n\t
替换为
\n
或检查您的注册表中是否启用了多行模式代码中其他位置的选项卡会发生什么情况?保持不变?制表符总是在字符串的开头吗?是的-制表符应该总是在开头(至少现在是这样),但我们可以暂时忘记-普通“\t”也不起作用。@Rivka:可能是您的编译器或编辑器设置。它确实有效,但请注意,它使用的是
“*”
,而不是
(这样您就可以看到区别了)。我直接从VS 2012复制/粘贴-不起作用。我注意到在调试模式下,值是“受保护的无效页面加载(对象发送方,事件参数e)\r\n{\r\n Response.Write(\'Hello World\”);\r\n}”(在“\r\n”后面有4个空格)。当我用“\s\s\s\s”代替“\t”时,它在第一行起作用。@Rivka:可能是编辑器配置错误或“有用”插件(是否使用Resharper?)干扰了复制+粘贴。尝试重新安装Visual Studio,它应该可以工作。我有一个干净的VS在这里,它的工作。重新安装VS?认真地不,我不使用重竖琴。编辑:我实际上使用的是大众汽车2010,是吗?当您复制时,您会得到“\t”来代替选项卡?@Rivka:如果您在Visual Studio中启用“显示空白”,您可能会发现更容易理解。键盘快捷键和弦为“Ctrl+R Ctr+W”。每个空格字符显示为一个点。每个制表符显示为箭头。请注意,按Tab键时(取决于您的设置),可能会插入制表符或空格。我想这可能就是你感到困惑的原因。我几乎总是启用“显示空白”(结对编程时除外,因为它会让我的同事疯狂地查看所有这些点)。@Rivka:可能是您的编译器或编辑器设置。它确实有效,但请注意,它使用的是
“*”
,而不是
(这样您就可以看到区别了)。我直接从VS 2012复制/粘贴-不起作用。我注意到在调试模式下,值是“受保护的无效页面加载(对象发送方,事件参数e)\r\n{\r\n Response.Write(\'Hello World\”);\r\n}”(在“\r\n”后面有4个空格)。当我用“\s\s\s\s”代替“\t”时,它在第一行起作用。@Rivka:可能是编辑器配置错误或“有用”插件(是否使用Resharper?)干扰了复制+粘贴。尝试重新安装Visual Studio,它应该可以工作。我有一个干净的VS在这里,它的工作。重新安装VS?认真地不,我不使用重竖琴。编辑:我实际上使用的是大众汽车2010,是吗?当您复制时,您会得到“\t”来代替选项卡?@Rivka:如果您在Visual Studio中启用“显示空白”,您可能会发现更容易理解。键盘快捷键和弦为“Ctrl+R Ctr+W”。每个空格字符显示为一个点。每个制表符显示为箭头。请注意,按Tab键时(取决于您的设置),可能会插入制表符或空格。我想这可能就是你感到困惑的原因。我几乎总是启用“显示空白”(结对编程时除外,因为它会让我的同事疯狂地看这些点)。这对静态“\t”有效,但对我的情况没有帮助。这对静态“\t”有效,但对我的情况没有帮助。
string text = "\tHello World";
string replacedTabWith4Spaces = text.Replace("\t", "    ");