2017-09-12 2 views
0

* 나 사이의 전체 내용을 추출하는 정규 표현식을 작성 도와주세요.
참고 * 수는 달라질 수 있습니다. 추출 서브 문자열

내가 예상하는 대신 2

1 개 블록 출력

1.

Thanks for contacting us  
Regards,  
XXX 

2.

It wAS a pleasure talking with you 
Good to see you today 

테스트로 (\*\n)([\s\S]*)(\n\*)하지만 그룹의 모든 노력을 성 링 :

******* 

Thanks for contacting us  
Regards,  
XXX 

************ 

It wAS a pleasure talking with you  
Good to see you today 

******* 
+0

'Regex.Matches (S, @ "(들) \ * {3} (*) (= \ * {3,} |?.? $)") .Cast () .Select (x => x.Groups [1] .Value.Trim()). ToList()' –

+0

전용 첫 번째 그룹과 일치 함 – Moher

답변

1

당신은 regex demo

세부

  • (?s) 참조

    var results = Regex.Matches(s, @"(?s)\*{3,}(.*?)(?=\*{3,}|$)") 
        .Cast<Match>() 
        .Select(x => x.Groups[1].Value.Trim()) 
        .ToList(); 
    

    을 사용할 수 있습니다 - RegexOptions.Singleline 인라인 수정

  • 를 1,515,
  • \*{3,} - 3 개 이상의 별표
  • (.*?) - 그룹 1 : *? 가능한 한 거의 같은 0+ 문자는 지연 정량
  • (?=\*{3,}|$)이다 - 위치 일치 (중첩 일치 받아야) 양 룩어 3 개 이상의 별표 또는 문자열의 끝이옵니다.

.Select(x => x.Groups[1].Value.Trim()) 부분은 그룹 1의 값을 가져 와서 앞/뒤 공백을 제거합니다.

또 다른 방법은 다음 그룹 1로 모든 라인이 3 개 이상의 별표로 stasrting하지 캡처의 *** + 라인과 일치하는 것입니다

(?m)^\*{3,}.*((?:\r?\n(?!\*{3,}).*)*) 

this regex demo (가 그대로 위의 코드에서 사용할 수있는 참조, 너무.)

세부

  • (?m) - 라인의 ^$ 경기 시작/끝을 만들 수있는 RegexOptions.Multiline 수정
  • ^ - 라인의 시작
  • \*{3,}-3 이상의 별표
  • .* - 나머지 줄 (또는 \r?$을 사용하십시오. 확인 라인의 끝)에 도달
  • ((?:\r?\n(?!\*{3,}).*)*) - 그룹 1 : 제로 또는
    • \r?\n(?!\*{3,})의 이상의 시퀀스 - 3 인 이상 *
    • .*에 따르지 CRLF 또는 LF 라인 끝 - 문자열의 나머지