2016-09-01 2 views
0

저는 새로운 C# 프로그래머입니다. 나는 그들이이 형식에있는 경우 PDF 파일 (책)에서 헤더를 추출하는 간단한 C# 응용 프로그램 만들려고 노력 해요 :여러 줄의 머리글에 대한 정규식 C#

1.1 전기/전자 산업

1.2 간략한 역사를

string pattern = @"(\d+)(\.)(\d+) ([A-Z]+).([A-Z]+).([A-Z]+).([A-Z]+).([A-Z]+)"; 
Regex.match(strText,pattern); 
: 측정

1.3 단위는

나는 코드를 사용하고 있습니다

단일 행 헤더에서는 제대로 작동하지만 두 행/다중 행 헤더에서는 작동하지 않습니다. 아무도 도와 줄 수 있습니까?

+0

목차 같은 것이 있습니까? 책의 전체 텍스트를 단일 문자열로 간주하고 정규 표현식을 한 번 실행하면 정규 표현식을 사용할 수 없습니다. 많은 가양 성을 포착하고 일부는 누락 될 가능성이 큽니다. – SledgeHammer

+0

그 정규식은 당신이 생각하는대로하지 않습니다. 예를 들어'XYZ1.2 A BRIEF HISTORY' 행과 일치 할 것이고 '2.4 SUMMARY' 행과 일치하지 않을 것입니다. 나는 당신이 정규 표현식에 대한 튜토리얼을 찾을 것을 권한다. – AdrianHHH

+0

그래, 나는이 책의 전체 내용을 말하고있다. 그것이 형식이 잘되어 있기 때문에 그것을 선택합니다.작동하는 것처럼 보이지만, 그래도 해결할 수있는 사소한 문제가 있습니다. @SledgeHammer – rabinmallick

답변

0

저는 C# 스타일 정규식에 익숙하지 않지만 . 어떤 문자 일치 (새 줄 제외)가 아닙니까?

새 라인이 필요한 경우 끝에 \n 을 포함시켜야합니다. 대안을 사용할 계획이 아니라면 ?도 가능합니다.

하지만이 정규식은 아무런 문제도 일으키지 않는다는 것에 놀랐습니다. 책의 형식이 완벽하지 않다면 말이죠.

0

이미 단일 문자열로 필요한 목차를 얻었고 유일한 문제는 두 번째 수준 헤더를 구문 분석하는 것입니다.

대문자 만 일치시키는 정규 표현식이 수정되었습니다. 이 headers 필요한 모든 데이터가 포함됩니다 후

string pattern = @"((\d+\.\d+) ([A-Z\s]+)\n)+"; 
    var match = Regex.Match(input, pattern); 

    var headers = new List<string>(); 
    for (var i = 0; i < match.Groups[1].Captures.Count; i++) 
    { 
     headers.Add(match.Groups[1].Captures[i].Value); 
    } 

을 그리고 :

는 다음과 같은 코드로 원하는 결과를 얻을 수 있습니다.

input에는 입력 데이터가 있다고 가정합니다. 또한 \n은 줄 바꿈 문자입니다.

정규식이 단순화되었습니다.

(\d+\.\d+)은 "하나 이상의 숫자 문자", 점, "하나 이상의 숫자 문자"의 순서를 나타냅니다.

([A-Z\s]+)\n - "하나 이상의 대문자 또는 공간", "새 라인 문자"또한

는 C#을 정규식에 익숙해 다음 article 읽어 보시기 바랍니다.

+0

안녕 링크 & 솔루션 주셔서 감사합니다. 귀하의 솔루션은 대문자와 소문자 문자열을 모두 포착합니다. 대문자 만 잡을 수있는 방법이 있습니까? – rabinmallick

+0

@rabinmallick 대문자 및 공백 만 일치시키는 정규식을 수정했습니다. –

관련 문제