2012-07-29 5 views
1

HTML 형식의 C# 코드를 작성하고 있습니다. 탭/들여 쓰기를 4 개의 공백으로 바꾸려고합니다.탭 또는 4 공백 찾기 (C# 코드)

다음은 예입니다.

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

Response.Write 앞에 4 개의 공백이있는 탭을 교체해야합니다.

다른 변형을 사용하여^\ t을 시도했지만 \ s \ s \ s \ s을 시도했습니다. 나는 이것이 단순 할 것이라고 생각했지만, 시도한 것은 아무것도 탭과 일치하지 않는 것처럼 보였다.

내가 뭘 잘못하고 있니?

감사합니다.

편집

내가 TextBox1에로 VS에서 직접 복사합니다.

enter image description here

당신이 볼 수 있듯이

는 문제의 근본 인 텍스트 상자 값에는 실제 탭 (\의 t)이 없습니다. 내 의견에 언급했듯이^공백은 작동했다 (첫 줄만).

따라서 최종 정규식은 "\ s \ s \ s \ s"처럼 보일 것입니다.

+0

봅니다'\ n \ t' \ '로 대체 N'또는 코드의 다른 장소에서 탭이 어떻게해야합니까 당신의 정규식 –

+0

에에 여러 줄 모드를 확인? 변경되지 않은 채로 남아 있었습니까? –

+2

탭은 항상 문자열의 시작 부분에 있습니까? – Daniel

답변

3

이것은 당신이 원하는 일을해야합니다

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

이 온라인을 참조하십시오 ideone


업데이트 여기 비주얼에서 실행되는 ASP.NET 웹 폼에 대한 버전의

웹 개발자 2010 익스프레스 :

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

을 별표 만보고 쉽게이 할 수 있습니다 탭이 공백으로 바뀌 었는지 확인하십시오. 별표 대신 공백을 사용하려면 '*'' '으로 변경하십시오.

+0

이상한, 동일한 코드가 나를 위해 작동하지 않았다 (ideone에서). – Rivka

+0

@Rivka : 아마도 컴파일러 또는 편집기 설정. 작동하지만,''''대신''* "'를 사용하고 있음을 주목하십시오 (차이점을 볼 수 있습니다). –

+0

VS 2012에서 바로 복사/붙여 넣기 중입니다. 작동하지 않습니다. Response.Write (\ "Hello World \"); \ r \ n} "디버깅 모드에서주의를 기울였습니다. 값은"protected void Page_Load (object sender, EventArgs e) \ r \ n "\ r \ n"뒤에 4 개의 공백이 있음). "\ t \"대신 "\ s \ s \ s \ s"를 대문자로 바꾸면 첫 번째 줄에서 작동합니다. – Rivka

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

이것은 정적 인 "\ t"로 작동하지만 제 경우에는 도움이되지 않습니다. – Rivka