2013-07-04 2 views
6

관련 질문을 많이 보았지만 시도했지만 작동하지 않습니다. div의 콘텐츠를 id "thumbs"와 일치 시키려고합니다. 그러나 regex.Success 거짓 :(div의 정규식 추출 내용

Match regex = Regex.Match(html, @"<div[^>]*id=""thumbs"">(.+?)</div>"); 
+8

하지만 *에 주석을 사랑하는 HTML 민첩성 팩 – Sayse

답변

8

정규식

HTML이 엄격하지 않으며 그것의 형식과 정기적 인 .. HTML 파일을 구문 분석을위한 좋은 선택이 아니다 ..

사용을 반환 htmlagilitypack


사용 파서?

가 고려하는 이유 당신의 regex..There 당신이 당신의 코드를 깰 수있는 경우 무한한 수 있습니다

    중첩 된 div는
  • 일부 div의 제외 (! 종료 태그을 해달라고가있는 경우 귀하의 정규식이 작동하지 않습니다
  • 당신이 코드를 사용할 수 있습니다

XHTML)을 사용하여 검색 할 수 HtmlAgilityPack

HtmlDocument doc = new HtmlDocument(); 
doc.Load(yourStream); 

var itemList = doc.DocumentNode.SelectNodes("//div[@id='thumbs']")//this xpath selects all div with thubs id 
        .Select(p => p.InnerText) 
        .ToList(); 

//itemList now contain all the div tags content having its id as thumbs 
+0

의 후보가 같은 소리 불규칙한 표현 : – Charleh

+0

감사합니다. –

+0

@Charleh : D ..... – Anirudha

1

아니요. 그가 탈출해야한다고 생각하지 않습니다. 그는 패턴 앞에 @가 있습니다. 나는 이것이 올바른 생각 :

<div[^>]*id="thumbs">(.+?)</div> 

그래서 이중 따옴표

0

이 시도 :

Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)" 
    + @"thumb(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div " 
    + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>", 
    RegexOptions.Singleline); 
주제 오프 부분적으로