Как получить внутренний HTML-элемент div элемент по идентификатору с помощью регулярного выражения в C # - PullRequest
3 голосов
/ 16 сентября 2009

Я получаю полный HTML-код, используя WebClient. Но мне нужно получить указанный div из полного HTML с помощью регулярного выражения.

например:

<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>

если мне нужен div с именем '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 с именем 'left', функция return

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

Если мне нужен div с именем 'right', функция return

 main side

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 16 сентября 2009

Почему люди настаивают на попытке использовать регулярные выражения для анализа 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, и код очень похож на приведенный выше)

2 голосов
/ 16 сентября 2009
string divname = "somename";
Match m = RegEx.Match(htmlContent, "<div[^>]*id="+divname+".*?>(.*?)</div");
string contenct = m.Groups[1].Tostring();

не будет работать, если у вас есть вложенные div внутри нужного div

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...