我正在尝试将网页转换为纯文本。但是,如果我遇到了表格,我也会获得td和tr标签。如果我替换那些表标签,那么我就无法获得一些内容。
这是我的代码
string s = Regex.Replace(htmldoc, "<script.*?</script>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<!--.*?-->", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<style.*?style>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<a.*?a>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<img.*?img>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
s = Regex.Replace(s, "<table.*?table>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(s);
s = doc.DocumentNode.SelectSingleNode("//body").InnerText.Trim();
请检查并告诉我如何在不获取td和tr标签的情况下从表中获取内容。
答案 0 :(得分:1)
如果您使用HTML Agility包来解析表格,则无需使用正则表达式删除HTML标记。在SO上有一些使用HTML Agility Pack解析表的好例子。例如:HTML Agility pack - parsing tables
答案 1 :(得分:1)
您可以使用正文的InnerText
:
string html = @"
<html>
<title>title</title>
<body>
<h1> The wheel.</h1>
Stop reinventing the wheel ! Use powerful APIs
for manipulating html docs !
<h3> I am fine </h3>
<img src=""da_wheel_in_my_mind.png""/>
</body>
</html>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;
接下来,您可能想要折叠空格和新行:
text = Regex.Replace(text, @"\s+", " ").Trim();
但请注意,虽然在这种情况下有效,但hello<br>world
或hello<i>world</i>
等标记将由InnerText
转换为helloworld
- 删除标记。很难解决这个问题,因为显示通常由CSS决定,而不仅仅是由标记决定。