Skip to main content
 首页 » 编程设计

c#之我在使用 C# 中的多行正则表达式时遇到问题,我该如何解决

2024年01月31日27Renyi-Fan

我有以下代码来尝试提取 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); 
}