如何使用 regex.split 在 c# 中解析 html 并返回值数组
Posted
技术标签:
【中文标题】如何使用 regex.split 在 c# 中解析 html 并返回值数组【英文标题】:How to parse html and return array of values in c# using regex.split 【发布时间】:2011-04-17 23:35:16 【问题描述】:目前我正在尝试解析一些 html 并返回一个包含每个元素内的值的数组。
例如:
如果我将以下标记传递给函数
var element = "td";
var html = "<tr><td>1</td><td>2</td></tr>";
return Regex.Split(html, string.Format("<0*.>(.*?)</0>", element));
我期待返回一个数组[] 1, 2
我的正则表达式需要是什么样的?目前我的数组返回了很多元素,我的正则表达式技能缺乏
【问题讨论】:
Parsing (X)HTML with RegEx!?!!!!??? 这个笑话永远不会过时,是吗? 在你继续沿着这条路走之前,请阅读这篇文章(编辑 - dtb 打败了我) 【参考方案1】:不要使用正则表达式解析 HTML。
相反,您应该使用HTML Agility Pack。
例如:
HtmlDocument doc = new HtmlDocument();
doc.Parse(str);
IEnumerable<string> cells = doc.DocumentNode.Descendants("td").Select(td => td.InnerText);
【讨论】:
【参考方案2】:你真的不应该使用正则表达式来解析 html。 html 不是常规语言,因此正则表达式无法正确解释它。您应该使用解析器。
c# 有 html parsers for this.
【讨论】:
【参考方案3】:加载html的方法比原来的答案变了,现在是:
// From File
var doc = new HtmlDocument();
doc.Load(filePath);
// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);
// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);
但是,如果您按照上面提供的链接遵循文档,您应该没问题:)
【讨论】:
以上是关于如何使用 regex.split 在 c# 中解析 html 并返回值数组的主要内容,如果未能解决你的问题,请参考以下文章
设置对象数组中每个项目的属性(C#,Regex.Split())
Java string.split 与 C# Regex.split - 限制为一定数量的字段