You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中用Regex提取HTML所有<article>标签内容的方案求助

问题描述

我想在C#中获取网站HTML文档后,用正则表达式(Regex)提取所有<article>标签之间的内容,但之前尝试的正则没成功。附上我的尝试代码和HTML片段,求可行方案。

尝试的正则代码

<article(.*)>(<("["^"]*"|'[^']*'|[^'">])*>|(\n)|)*</article>

HTML文档片段

<div></div>

<div class="entry-content">
</div>
<div class="kt_archivecontent  "  > 

<article id="post-5555">
<div class="row">
<div class="col-md-12 ">
<div class="post-text-inner">
<div class="/" rel="category tag">Allgemein</a></div><header>
<a >Some Text</h3></a><div class="post-top-meta kt_color_gray">
<span class="postdate kt-post-date updated">
25. Juli 2022</span>
<span class="postauthortop kt-post-author author vcard">
<span class="kt-by-author">by</span><span itemprop="author">
<a href="https://some link" class="fn kt_color_gray" rel="author">
Some text</a>
</span>
</span> 
</div>
</header>
<div class="entry-content">
<p>some Text<a>Read More</a></p>
</div>
<footer>
</footer>
</div>
</div>
</div>
</article>

<div></div>
解决方案

方案一:修正正则表达式

你的正则存在贪婪匹配和未处理多行内容的问题,修正后可以尝试以下代码:

string html = "你的HTML字符串";
// 正则模式:匹配article标签,非贪婪捕获内部所有内容
string pattern = @"<article[^>]*>([\s\S]*?)<\/article>";
// 启用多行模式和忽略大小写,确保兼容不同格式的HTML
Regex regex = new Regex(pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);

MatchCollection matches = regex.Matches(html);
foreach (Match match in matches)
{
    // Groups[1]就是article标签内的内容
    string articleContent = match.Groups[1].Trim();
    // 这里处理提取到的内容
}

正则说明

  • <article[^>]*>:匹配任意属性的<article>起始标签,[^>]*避免误匹配到其他标签
  • ([\s\S]*?):非贪婪匹配所有字符(包括换行符\s和非换行符\S),直到遇到第一个</article>
  • RegexOptions.Multiline:让正则正确识别换行内容
  • RegexOptions.IgnoreCase:兼容大小写不同的标签(如<ARTICLE>)

方案二:使用HTML解析库(推荐)

正则处理HTML容易因为标签嵌套、特殊字符、注释等场景失效,更推荐用专门的HTML解析库HtmlAgilityPack,步骤如下:

  1. 通过NuGet安装HtmlAgilityPack:在NuGet包管理器中搜索并安装HtmlAgilityPack
  2. 编写解析代码:
using HtmlAgilityPack;

string html = "你的HTML字符串";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

// 选中所有article节点
HtmlNodeCollection articleNodes = doc.DocumentNode.SelectNodes("//article");
if (articleNodes != null)
{
    foreach (HtmlNode node in articleNodes)
    {
        // 获取标签内的HTML内容
        string articleContent = node.InnerHtml.Trim();
        // 处理内容
    }
}

这个方法能稳定处理各种复杂HTML结构,避免正则的局限性。

内容的提问来源于stack exchange,提问作者TheGameZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:42:23