求匹配HTML中有序列表内<li>开始标签的C#正则表达式
适用于C#的正则表达式:匹配
- 内的
- 开始标签
解决方案正则表达式
结合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中标签跨行的情况
你之前正则的问题分析
- 第一个表达式
(?<=<ol>)[^<]*<li[^>]*>:[^<]*只能匹配<ol>之后到第一个<之间的内容,因此只能捕捉到<ol>后的第一个<li>,无法匹配后续的<li>标签 - 第二个表达式
(?<=<ol>)[^<]*<li[^>]*>(?=</ol>):(?=</ol>)要求<li>标签紧跟</ol>,同时[^<]*的限制也只能匹配第一个<li>,自然没有匹配结果
内容的提问来源于stack exchange,提问作者Tristan Bailey
相关产品推荐
相关产品推荐

