2012-10-15 3 views
1

나는 모든 여분의 줄 바꿈경기에 C#을 호환 정규 표현식을 찾기 위해 노력하는 모든 초과 및 후행 줄 바꿈에 맞게 교체 할 수 있도록 :은 정규식은

 

first line 
    second line 

third line 

같은 :

 
first line 
    second line 
third line 

없이 후행 줄 바꿈.

잘 알려진 멀티 라인 ^\s*$이 아니며, 마지막 줄 바꿈과 일치합니다..

나는 (?<!\S+)\r\n|(\r\n)+\z 가지고 올 수 있었던 :

    , 모두
  1. 추악하고

    사람이 되었습니까

아마 느린 단일 라인과 멀티 라인 모드에서
  • 작품 간단하게 정규 표현식을 만들 수 있습니까?

  • 답변

    4

    그 이유는 마지막 행에 아무 것도없는 경우 문자열 앞에 $ 앞에 일치합니다. 줄 바꿈 \n^

    ^\s*^ 
    

    사이의 경기에서 빈 행의 경우

    . 그래서 이것은 행의 시작에서 다음 행까지 공백을 일치시킵니다. 마지막 빈 행에 대해

    , 당신은 경기가 발생해야하는 문자열

    $\s*\z 
    

    와의 조합

    ^\s*^|$\s*\z 
    

    \z의 끝까지 마지막 줄 바꿈하기 전에에서 모든 공백과 일치 할 필요 문자열의 끝

    Anchors on msdn

    내 시험 :

    string s = "This is the first row\n\nThis is the third\n \nThis the fifth\n"; 
    
    string result = Regex.Replace(s, @"^\s*^|$\s*\z", "", RegexOptions.Multiline); 
    Console.WriteLine(result); 
    
    Console.WriteLine("fin"); 
    Console.ReadLine(); 
    
    +0

    나는이 변종을 많이 사용했는데 너 자신을 포함하여 모두 작동하는 것처럼 보이지만 텍스트의 마지막 줄 바꿈은 무시한다. –

    +0

    @ViktorSvub, 몇 가지 테스트를 수행하고 내 대답을 변경했습니다. – stema

    +0

    내 테스트에 따르면, 이것은 거의 OK입니다 : 끝에 매달려 'r'을 남겨 두지 않고 수정하면됩니다 : '^ \ s *^| \ r $ \ s * \ z' –

    1

    방법 하이브리드 접근 방식에 대해, 후행 줄 바꿈을 제거하려면 :

    Regex.Replace(input, @"^\s+$", "", RegexOptions.Multiline).TrimEnd() 
    

    간단하고 읽을.

    +0

    I 이 가능성에 대해 알고 있지만 순전히 C# 호환 정규 표현식에서 할 수있는 방법이 있는지 알고 싶었습니다. –

    +0

    죄송합니다, 개인적으로 교대로 사용하는 것을 싫어합니다. 그러나 이것은 작동합니다 :'@ "^ \ s + $ | \ s + \ z"'(위의 패턴을 대체하십시오). 그리고 @stema에 +1 - 멋진 설명과 앵커 링크. – kuujinbo