2012-09-23 5 views
0

2 문자열 사이의 모든 정규식과 일치하길 원합니다.이것을 어떻게 정규식과 일치시킬 수 있습니까? C#

입력 텍스트는 다음과 같이이다 :

Back to previous › 






      › Send Message 

          › Add as Buddy 
      › Add as Favorite 
      › Block this Person 





     People who like this (click to upvote) 

내가> 이전 위로 사이에이 같은사람들이 모두 일치 싶어 (upvote에 클릭).

가장 쉬운 정규 표현식을 시도했지만 (?<=\ Back\ to\ previous\ ›\).*(?=People\ who\ like\ this\ profile\ \(click\ to\ upvote\)\)인데 운이 없다.

이데아는 2 줄 \ 문자열 사이의 모든 것을 잡아내는 것입니다. 줄 바꿈, 탭, 영숫자 등등 잡는다고 생각할 수도 있습니다.

+0

당신은 아니오 단어 "페이지"를 텍스트에 넣었으나 정규식이 –

+0

인데 죄송합니다. 여전히 문제는 아닙니다. –

+0

"." .net은 기호입니다. exept \ n –

답변

0

당신은 당신이 확신하는 경우 정규 표현식에 사용할 이유가없는 다른 라인에 당신의 문자열 구분 기호 (예 : "뒤로 이전에") :

string text = /* Get Text */; 
string lines = text.Split(); 
IEnumerable<string> content = lines.Skip(1).Take(lines.length - 2); 

또는 대안 :

const string matchStart = "Back to previous >"; 
const string matchEnd = "People who like this (click to upvote)" 
int beginIndex = text.IndexOf(matchStart) + matchStart.Length; 
int endIndex = text.IndexOf(matchEnd); 
string content = text.Substring(beginIndex, endIndex - beginIndex); 

을 (내가 게시 한 코드는 테스트되지 않았지만 제대로 작동 함)

+0

zenoposter (C# \. net으로 만들어 짐)라고 불리며, 정규 표현식은 동일합니다. 그래서 정규식이 필요합니다. –

+1

@andreimiko : 정규식을 사용하지 않고 문제를 해결할 수 있다면 그렇게 생각합니다. 읽을 수 없으므로 나중에 수정하는 것이 더 어렵습니다. – Homam

1

이 정규식을 사용해보십시오.이 정규식을 사용하십시오.

(? < = 뒤로 \ 석재 \ sprevious *>) (= 사람 \ swho \ slike \ sthis)

string Input = @"Back to previous › 






     › Send Message 

         › Add as Buddy 
     › Add as Favorite 
     › Block this Person 





    People who like this (click to upvote) "; 
     foreach (Match M in Regex.Matches(Input, @"(?<=Back\sto\sprevious.*?›).*?(?=People\swho\slike\sthis)", RegexOptions.IgnoreCase | RegexOptions.Singleline)) 
     { 
      MessageBox.Show(M.Value.Trim()); 
     } 
메시지 상자에서 다음

이 표시됩니다.?.?

› Send Message 



         › Add as Buddy 

     › Add as Favorite 

     › Block this Person 
관련 문제