c# - 正则表达式来解析某些 html 标签
问题描述
我有一个字符串,其中部分包含在 html 标记中,主要是span和strong。我想将它分成几部分并获取每个部分的文本、标签名称和类属性
Take <span class="victoria line-text">Victoria line</span> to <strong>Highbury & Islington</strong>
因此,对于上述文本,我要提取 4 个部分。
var result = new MyObj[]
{
new MyObj{ Text="Take "},
new MyObj{ Text="Victoria line", Tag="span", ClassAttribute="victoria line-text" },
new MyObj{ Text=" to "},
new MyObj{ Text="Highbury & Islington", Tag="strong"},
};
它不是一个有效的 XML/HTML(只是一个包含在标签中的部分文本),所以我决定使用一些简单的正则表达式来解析我需要的值。我设法使用此代码获取跨度信息
var str = "Take <span class=\"victoria line-text\">Victoria line</span> to <strong>Highbury & Islington</strong>";
Regex regex = new Regex("<span class=\"(.*?)\">(.*?)</span>");
if(regex.IsMatch(str))
{
MatchCollection collection = regex.Matches(str);
foreach(Match m in collection)
{
string text = m.Groups[2].Value; //Victoria line
string classes = m.Groups[1].Value; //victoria line-text
Console.WriteLine(text + " " + classes);
}
}
是否可以通过正则表达式获取所有部分的信息?
输入将包含带有可能无效的未转义 html 字符(即 &、'" )的纯文本,只是其中的一部分包裹在 span 或 strong 标签中。XmlDocument 或其他库会抛出异常,因为它不是正确的 html。
解决方案
使用 Regex 解析 html 总是很棘手,所以我不会在这里推荐 Regex。我宁愿推荐的是使用已经做得很好的现有库。看看AngleSharp或HtmlAgilityPack - 两者都可以作为 nugets 使用。
注意:不用担心它没有被 <> 包裹——你可以自己做,尝试解析<p>{yourString}</p>
推荐阅读
- php - Laravel 显示来自数据库表 get() 和 first() 方法的数据
- php - 解析存储为字符串的 PHP 数组并将项目连接到 Power Query 中的字符串
- php - 处理大文件上传并发送到 API
- jquery - 如何使用 Oauth 1.0 在 Ajax 请求上设置标头?有人可以帮我检查我的授权标头是否做错了吗?
- python-3.x - 使用 SQLAlchemy 检查列是否在数字范围内
- python - 如何防止 Instagram 临时请求被 selenium 阻塞?
- javascript - 将值保存到 localStorage() 并在我用 Javascript 重新加载页面时使它们保持不变
- javascript - 无法在 Javascript 中读取对象属性
- vue-cli-4 - 未能从 https://registry.yarnpkg.com/vue-cli-version-marker 获得响应
- spring-boot - 在 Spring-Boot 中停止 RabbitMQ-Connection