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

求匹配HTML中有序列表内<li>开始标签的C#正则表达式

适用于C#的正则表达式:匹配
    内的
  1. 开始标签

解决方案正则表达式

结合C#正则特性,启用单行模式后可使用以下表达式匹配目标内容:

(?<=<ol>.*?)<li[^>]*>

需配合RegexOptions.Singleline选项,让.能匹配换行符,适配HTML的换行结构。

在C#中的使用示例

string htmlContent = @"<div>
<ul>
<li>Apple
<li>Banana
<li style=color:red>Cherry
</ul>
<ol>
<li>Avocado
<li>Beetroot
<li style=color:orange>Carrot
</ol>
<ul>
<li>Test Item A</li>
<li>Test Item B</li>
<li>Test Item C</li>
</ul>
<ol>
<li>Test Item 1</li>
<li>Test Item 2</li>
<li>Test Item 3</li>
</ol>
</div>";

Regex regex = new Regex(@"(?<=<ol>.*?)<li[^>]*>", RegexOptions.Singleline);
MatchCollection matches = regex.Matches(htmlContent);

// 输出匹配结果
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

正则逻辑解释

  • (?<=<ol>.*?):反向预查,确保当前位置处于<ol>标签之后,.*?采用非贪婪匹配,避免跨多个<ol>块匹配内容
  • <li[^>]*>:精准匹配<li>开始标签,[^>]*可匹配任意属性(比如style=color:orange),直到标签闭合的>结束
  • RegexOptions.Singleline:让.能匹配换行符,处理HTML中标签跨行的情况

你之前正则的问题分析

  1. 第一个表达式(?<=<ol>)[^<]*<li[^>]*>:[^<]*只能匹配<ol>之后到第一个<之间的内容,因此只能捕捉到<ol>后的第一个<li>,无法匹配后续的<li>标签
  2. 第二个表达式(?<=<ol>)[^<]*<li[^>]*>(?=</ol>):(?=</ol>)要求<li>标签紧跟</ol>,同时[^<]*的限制也只能匹配第一个<li>,自然没有匹配结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:32