我正在使用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
我该怎么办?
答案 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,请使用XmlDocument
或XDocument
,以及与上述代码非常相似的代码)
答案 1 :(得分:2)
string divname = "somename";
Match m = RegEx.Match(htmlContent, "<div[^>]*id="+divname+".*?>(.*?)</div");
string contenct = m.Groups[1].Tostring();
如果你在所需的div 中嵌套了div,将无效