所以,请说我正在解析以下HTML字符串:
<html>
<head>
RANDOM JAVASCRIPT AND CSS AHHHHHH!!!!!!!!
</head>
<body>
<table class="table">
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
<tr><a href="/subdir/members/Name">Name</a></tr>
</table>
<body>
</html>
我想隔离 ** 的内容(表类中的所有内容)
现在,我使用正则表达式完成此任务:
string pagesource = (method that extracts the html source and stores it into a string);
string[] splitSource = Regex.Split(pagesource, "<table class=/"member/">;
string memberList = Regex.Split(splitSource[1], "</table>");
//the list of table members will be in memberList[0];
//method to extract links from the table
ExtractLinks(memberList[0]);
我一直在寻找其他方法来进行这种提取,我在C#中遇到了Match对象。
我试图做这样的事情:
Match match = Regex.Match(pageSource, "<table class=\"members\">(.|\n)*?</table>");
上述目的是希望提取两个分隔符之间的匹配值,但是,当我尝试运行它时,匹配值为:
match.value = </table>
我的问题是,有没有办法从我的字符串中提取数据,这比我使用正则表达式的方法更容易/更易读/更短?对于这个简单的例子,正则表达式很好,但是对于更复杂的例子,我发现自己的编码相当于屏幕上的涂鸦。
我真的很想使用匹配,因为它看起来像一个非常整洁的课程,但我似乎无法让它满足我的需求。任何人都可以帮我这个吗?
非常感谢!
答案 0 :(得分:3)
使用HTML解析器,例如HTML Agility Pack。
var doc = new HtmlDocument();
using (var wc = new WebClient())
using (var stream = wc.OpenRead(url))
{
doc.Load(stream);
}
var table = doc.DocumentElement.Element("html").Element("body").Element("table");
string tableHtml = table.OuterHtml;
答案 1 :(得分:0)
您可以将XPath与HTmlAgilityPack一起使用:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
var elements = doc.DocumentNode.SelectNodes("//table[@class='table']");
foreach (var ele in elements)
{
MessageBox.Show(ele.OuterHtml);
}
答案 2 :(得分:0)
您在正则表达式中添加了括号以捕获匹配项:
Match match = Regex.Match(pageSource, "<table class=\"members\">(.|\n*?)</table>")
;
无论如何,似乎只有Chuck Norris能正确解析HTML与正则表达式。