2017-09-26 1 views
0

전체 txt 파일을 읽고 문자열의 특정 부분을 찾으려고합니다. 예를 들어, 문자열 "Date : 23 Sep 2001"을 찾고 있습니다. 물론 날짜가 바뀔 것이고 이것은 내 문제가 아닙니다. 내게 맞는 파일이 발견되면 파일의 나머지 부분을 모두 얻게됩니다. 내 질문은 파일의 나머지 부분이 아니라 원하는 부분 만 얻으라고 어떻게 말합니까?일치하는 텍스트 만 정규식으로 추출하십시오

Date: 23 Sep 2017 

1. In this Agreement, "I", "me" and "my" refers to the account holder. 

답변

1

더 나은 소송의 요구하는 한정사를 사용해야합니다 :

  • {m,n}m에서 N 반복에

    • * 0 개 이상의 반복
    • + 하나 이상의 반복이
    • {m} 정확히 m가 반복

    날짜 형식이 "dd M"으로 확실한 경우 MM의 YYYY는 "당신의 패턴은 다음과 같이 표현한다 :

    @"Date:\s(?'date'\d{2}\s\w{3}\s\d{4})" 
    

    또는 당신은 사용할 수 있습니다

    덜 엄격하지만 3 개 부분이 일치하는 그룹에 캡처 할 의미가 있는지 확인합니다
    @"Date:\s(?'date'\d+\s\w+\s\d+)" 
    

    선물.

    욕심 많은 성격 때문에 *을 사용할 때주의해야합니다. 그렇지 않으면 정규식이 의도 한 것보다 훨씬 더 일치하는 것을 알 수 있습니다.

  • 1

    .*를 사용하면 길이에서 아무것도 일치, 그래서 그것은 전체 파일을 일치 :

    내 코드의 FileContents이 조각처럼 보이는이

    pattern = @"Date:\s(?'date'\w.*)\s" 
    rgx = new Regex(pattern, RegexOptions.Singleline); 
    matches = rgx.Matches(fileContents); 
    

    것 같습니다.

    그래서, 정규식은 다음과 같아야

    Date:\s(?'date'\d*\s\w*)\s 
    
    • \ D *는
    • * 한정 기호 ([0-9]과 동일) 자리수 일치 - 제로 무제한 배만큼 간의 일치를
    • \ w *는 임의의 단어 문자와 일치합니다 ([a-zA-Z0- 9_])
    관련 문제