使用正则表达式查找HTML ListItem(.NET)的内容

使用正则表达式查找HTML ListItem(.NET)的内容,.net,html,regex,.net,Html,Regex,使用以下文本作为示例,我需要能够在LI标记之间提取文本。请注意,第一个LI可能是故意错误形成的。换句话说,我想要所有的东西,从一个LI标签到它的结束LI标签或下一个LI开始标签 <UL> <LI class="test">This is the first ListItem Text. <LI>This is the second ListItem Test. </LI></UL> 这是第一个列表项文本。 这是第二个列表项

使用以下文本作为示例,我需要能够在LI标记之间提取文本。请注意,第一个LI可能是故意错误形成的。换句话说,我想要所有的东西,从一个LI标签到它的结束LI标签或下一个LI开始标签

    <UL>
<LI class="test">This is the first ListItem Text. 
<LI>This is the second ListItem Test. </LI></UL>
  • 这是第一个列表项文本。
  • 这是第二个列表项测试
到目前为止,我提出了:

<[Ll][Ii].*>(.*?)((?:<[Ll][Ii]>)|(?:</[Ll][Ii]>))
(.*)((?:)|(?:)
但这似乎与第一个LI标记匹配,直到结束标记与第二个LI标记的文本组匹配为止。我已经设法让它返回第一盘,但从来没有两者都返回。我也在使用“点匹配新行”选项,这是我需要它工作的.NET。谢谢

更新


在发布这个问题之前,我做了一些研究,事实上我看到并理解使用正则表达式解析html是个坏主意。话虽如此,我只需要能够从几个LI标签中获取文本,以确定在powerpoint幻灯片上突出显示哪些文本。我认为可能有一种更简单的方法来实现这一点,而不是处理一个单独的库,尤其是在我工作的地方,使用第三方库很难处理的情况下。不幸的是,在某些情况下,当在允许您对文本进行项目符号化的页面上使用HTML富文本输入框时,HTML可能最终格式错误。感谢大家对使用正则表达式解析HTML提出的所有建议。我应该事先说明,我已经阅读了很多类似的建议,但正在寻找一种简单情况下的快速解决方法。

如果这是一种反复出现的情况,我宁愿使用HTML解析器。使用正则表达式解析HTML将花费大量时间,并且可能仍然会出现错误,因为输入格式错误(如您所述)

这里有一个是我通过谷歌搜索找到的:

更新:

以下是有关StackOverflow的一些相关帖子:


如果这是一个反复出现的场景,我宁愿使用HTML解析器。使用正则表达式解析HTML将花费大量时间,并且可能仍然会出现错误,因为输入格式错误(如您所述)

这里有一个是我通过谷歌搜索找到的:

更新:

以下是有关StackOverflow的一些相关帖子:


正如斯拉夫所提到的,这很困难。您给出的示例特别棘手,因为第二个“
  • ”需要被视为第一场比赛的结束标记和第二场比赛的开始标记。这很难


    一个完全不相关的注意事项是,您可以将regex标志设置为不区分大小写,这样您就不必执行
    [Ll][Ii]
    等操作。

    正如Slavo所提到的,这很困难。您给出的示例特别棘手,因为第二个“
  • ”需要被视为第一场比赛的结束标记和第二场比赛的开始标记。这很难


    在一个完全不相关的注释中,您可以将regex标志设置为不区分大小写,这样您就不必执行
    [Ll][Ii]
    等操作。

    如果您的输入是合理有效的(并且列表项仅包含文本),您可能会:

    <li[^>]*>([^<]*)
    

    ]*>([^如果您的输入是合理有效的(并且列表项仅包含文本),您可能会逃脱:

    <li[^>]*>([^<]*)
    
    ]*>([^试试这个

    <li.*?>(.*?)(?=</li>|<li.*?>|</ul>|\Z)
    
    (.*)(=||\Z)
    
    请注意,您需要使用RegexOptions.IgnoreCase选项才能执行此操作,但它会使您的表达式更具可读性。

    尝试此操作

    <li.*?>(.*?)(?=</li>|<li.*?>|</ul>|\Z)
    
    (.*)(=||\Z)
    

    请注意,您需要使用RegexOptions.IgnoreCase选项才能工作,但它会使您的表达式更具可读性。

    我感觉自己像一条破乙烯基记录,但是:不要使用正则表达式解析非正则语言


    有大量的.NET HTML解析器可用,其中一些还可以纠正格式错误的HTML。我在谷歌上搜索了“.NET HTML解析器格式错误”,似乎有一些很有希望的结果。

    我觉得自己像一个破了的黑胶唱片记录,但是:不要使用正则表达式来解析非正则语言


    有大量的.NET HTML解析器可用,其中一些还可以纠正格式错误的HTML。我在谷歌上搜索了“.NET HTML解析器格式错误”,似乎有一些很有希望的结果。

    正则表达式不擅长解析HTML(请参阅原因)。您需要的是类似的HTML解析器。

    正则表达式不擅长解析HTML(请参阅原因)。您需要的是一个HTML解析器,如。

    然而,正如其他一些人所说,Regex不利于HTML解析。这就是为什么我说“可能会侥幸逃脱”。然而,正如其他一些人所说,Regex不利于HTML解析。这就是为什么我说“可能会侥幸逃脱”。如果和都丢失,则此操作将中断。@Tomalak:它还应根据请求将文本拾取到下一个
  • 标记,如果没有更多的
  • 或标记,则应拾取字符串的其余部分。看起来正是问题要求的内容。@Whatsit:我不认识到匹配问题输入结尾的要求。在哪里OP是这么说的吗?@Tomalak:他们没有,所以我想从技术上讲,这并不完全是他们想要的,但我想这是他们想要的。如果
  • 和都丢失了,这将被破坏。@Tomalak:它还应该按照要求将文本拾取到下一个
  • 标记,如果没有更多的
  • 或标记,它甚至应该拾取字符串的其余部分。看起来完全符合问题的要求。@Whatsit:我不知道与问题输入的结尾相匹配的要求。OP在哪里这么说?@Tomalak:他们没有,所以我认为从技术上讲,这不完全是他们要求的,但我希望这是他们想要的,而不是我想要的解决方案/路线为此,我认识到这确实是正确的答案。谢谢。虽然不是我想要的解决方案/路线