2009-06-11 140 views
5

考慮到html和body標籤可能是大寫,小寫或可能不存在,我將如何使用正則表達式從html文檔中提取正文, ?正則表達式提取HTML正文

+5

http://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content的重複? – M4N 2009-06-11 17:35:20

回答

9

不要對此使用正則表達式 - 使用類似Html Agility Pack的東西。

這是一個靈活的HTML解析器 建立一個讀/寫DOM,並支持 平原XPath或XSLT(你實際上 不必須瞭解XPATH也不 XSLT使用它,不要擔心。 ..)。它是 一個.NET代碼庫,它允許您將 解析爲「超出網頁」的HTML文件。解析器對「真實 世界」格式不正確的HTML非常寬容。對象 模型非常類似於建議 System.Xml,但對於HTML文檔(或 流)。

然後你可以用XPATH提取body

+0

我同意。我已經使用過它,必須說它快速,整潔,乾淨。 – 2009-06-11 17:46:45

0

這應該讓你很接近:

(?is)<body(?:\s[^>]*)>(.*?)(?:</\s*body\s*>|</\s*html\s*>|$) 
+0

請提供詳細的解決方案。 – ShaileshDev 2017-03-14 13:34:59

11

怎麼這樣呢?

它將<body></body>標記(由於RegexOptions.IgnoreCase而不區分大小寫)之間的所有內容捕獲到名爲theBody的組中。

RegexOptions.Singleline允許我們將多行HTML處理爲單個字符串。

如果HTML不包含<body></body>標記,則匹配的Success屬性將爲false。

 string html; 

     // Populate the html string here 

     RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline; 
     Regex regx = new Regex("<body>(?<theBody>.*)</body>", options); 

     Match match = regx.Match(html); 

     if (match.Success) { 
      string theBody = match.Groups["theBody"].Value; 
     } 
+0

+1清潔整潔的解決方案 – 2011-05-18 17:33:29