如何使用 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())

在 C# 中仅保留 Regex.Split 的匹配模式

Java string.split 与 C# Regex.split - 限制为一定数量的字段

C# 使用 Regex.Split 拆分大字符串。必须保留分隔符

提取字符串中字符串分隔符之间的所有子字符串(C#)

C#中Split用法~