2013-07-04 74 views
6

我已經看到了一些我的相關問題,我嘗試了它們,但它們不起作用。 我想匹配來自一個div與id「拇指」的內容。但regex.Success返回false :(C#正則表達式提取一個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);