如何在C#中使用正则表达式获取html div元素innertext

时间:2009-09-16 06:59:23

标签: c# regex

我正在使用WebClient获取完整的HTML代码。但我需要使用正则表达式从完整的html中获取指定的div。

例如:

<body>
<div id="main">
     <div id="left" style="float:left">this is a <b>left</b> side:<div style='color:red'> 1 </div>
     </div>
     <div id="right" style="float:left"> main side</div>
<div>
</body>

如果我需要名为'main'的div,则返回函数

<div id="left" style="float:left">this is a <b>left</b> side:<div style='color:red'> 1 </div>
     </div>
     <div id="right" style="float:left"> main side</div>

如果我需要名为'left'的div,则返回函数

this is a <b>left</b> side:<div style='color:red'> 1 </div>

如果我需要名为'right'的div,则返回函数

 main side

我该怎么办?

2 个答案:

答案 0 :(得分:4)

为什么人们会坚持尝试使用正则表达式解析html?如果你排除了一大堆边缘情况,你可以这样做......但只需使用HTML Agility Pack就可以了:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(...); // or Load
string main = doc.DocumentNode.SelectSingleNode("//div[@id='main']").InnerHtml;

(注意我假设它不是xhtml;如果是xhtml,请使用XmlDocumentXDocument,以及与上述代码非常相似的代码)

答案 1 :(得分:2)

string divname = "somename";
Match m = RegEx.Match(htmlContent, "<div[^>]*id="+divname+".*?>(.*?)</div");
string contenct = m.Groups[1].Tostring();
如果你在所需的div

中嵌套了div,

将无效