使用正则表达式查找HTML ListItem(.NET)的内容
使用以下文本作为示例,我需要能够在LI标记之间提取文本。请注意,第一个LI可能是故意错误形成的。换句话说,我想要所有的东西,从一个LI标签到它的结束LI标签或下一个LI开始标签使用正则表达式查找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> 这是第一个列表项文本。 这是第二个列表项
<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:他们没有,所以我认为从技术上讲,这不完全是他们要求的,但我希望这是他们想要的,而不是我想要的解决方案/路线为此,我认识到这确实是正确的答案。谢谢。虽然不是我想要的解决方案/路线