2009-12-22 3 views
0

안녕하세요, 나는 노력하고 부분 솔루션을 가지고 어려운 정규식 문제가 있지만 아직 완벽하게 작동하지 못했습니다. 내 테스트 문서입니다Regex 함수 도움말

1. HEY BUDDY 
1.A. Your the best 
1.A.1 And i know 
1.A.2. this because 
1.A.3 it is 
1.A.4. the 
1.A.5. truth i 
1.A.6. tell ya. 
1.B. so anyway 
1.B.1. one two 
1.B.2 three four! 
2. i have 
2.A. many numbers 
2.A.1. hahaha 
2.A.1.A. 3.2 ppl 
2.A.1.B. are in 
2.A.1.C my head. 
2.A.1.D. yes exactly 
2.A.2. 3.21 
2.A.3. if you dont 
2.A.4 trust me 
2.B then 
2.B.1. youre 
2.B.2.soo wrong 
2.C. its not 
3. even funny. 
3.A. but it 
3.B. kind of 
3.C. is a little 
4. bit i 
4.A. believe. 
4.A.1. talk to me 
4.A.2. more about 
4.B. these ppl 
4.B.2. in your head. 

... 내가 저장 한 후이 문서의 새로운 "총알"의 각을 찾아해야합니다 기본적으로, 나는 이와 같은 개요 형식으로 문서를 구문 분석해야 그들 사이의 텍스트는 더 많은 계산을합니다. 내가 알아 내지 못한 것은 정규 표현식을 사용하여 다른 개요 번호를 정확하게 식별하는 방법입니다. (나는 아마 다른 방법으로 정규 표현식을 할 수 있었지만 정규 표현식을 배우는 과정에있다. 나는 이런 식으로 할 생각을 가지고있다.) 내가 지금 생각해내는 것은 이것이다 :

(\b)(([1-9][0-9]?)(\.))([A-Z])?((\.)([1-9][0-9]?)((\.)([A-Z]))?)*(\.)?(\b) 

문제는 1., 2., 3. 또는 4.를 인식하지 못하고 "3"을 선택하는 것입니다. 본문 3.2 및 3.21에서. (그렇다면 필자는 이처럼 텍스트를 두 배로 늘릴 것입니다.) 윤곽선의 형식은 항상 # .AZ. # .A.A.Z ...이고 숫자는 99보다 커야합니다.

도움. "라인의 시작 : 어떤 숫자 + 문자 + 도트 조합, 공백 및 비 줄 바꿈 문자의 조합 : 라인의 끝"설명

답변

1
^[\d\w\.]+ [^\n]+$ 

은 당신 것 염두에두고 코드에이 정규식을 쓸 때 다른 슬래시를 추가해야합니다.

The Pattern class documentation매우입니다. 정규식을 사용하는 경우에도 유용합니다.

1

Bozho의 솔루션은 특정 예제 문서에 대해서만 작동하며 일치시키고 자하는 패턴으로 시작하지 않는 줄이 있으면 많은 잘못된 일치를 생성합니다. 여기에 좀 더 구체적인 해결책 :

^(\d{1,2}\.([A-Z]\.)?){1,2}\s 

그리고 여기에 그것을 사용하는 방법은 다음과 같습니다

using System; 
using System.IO; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var f = File.OpenText("input.txt")) 
     { 
      while (true) 
      { 
       string line = f.ReadLine(); 
       if (line == null) break; 
       Match match = Regex.Match(line, @"^(\d{1,2}\.([A-Z]\.)?){1,2}\s"); 
       if (match.Success) 
       { 
        Console.WriteLine(match.Value); 
        string result = match.Value.Substring(0, match.Value.Length - 2); 
        string[] array = result.Split('.'); 
        // .. 
       } 
      } 
     } 

    } 
}