我有以下代码来尝试提取 li 标签的内容。
string blah = @"<ul>
<li>foo</li>
<li>bar</li>
<li>oof</li>
</ul>";
string liRegexString = @"(?:.)*?<li>(.*?)<\/li>(?:.?)*";
Regex liRegex = new Regex(liRegexString, RegexOptions.Multiline);
Match liMatches = liRegex.Match(blah);
if (liMatches.Success)
{
foreach (var group in liMatches.Groups)
{
Console.WriteLine(group);
}
}
Console.ReadLine();
Regex 开始时更简单,并且没有多行选项,但我一直在对其进行调整以使其正常工作。
我想要结果 foo , bar和 oof但我得到了 <li>foo</li>和 foo .
除此之外,我似乎在 Regex101 中工作正常,https://regex101.com/r/jY6rnz/1
有什么想法吗?
请您参考如下方法:
我首先要说的是,我认为如评论中所述,您应该使用适当的 HTML 解析器(例如 HtmlAgilityPack)来解析 HTML。继续实际回答你的问题......
问题是您得到了一个匹配项,因为 liRegex.Match(blah); 只返回一个匹配项。您想要的是 liRegex.Matches(blah),它将返回所有匹配项。
所以你的用途是:
var liMatches = liRegex.Matches(blah);
foreach(Match match in liMatches)
{
Console.WriteLine(match.Groups[1].Value);
}
