正则表达式获取没有注释的HTML

时间:2009-11-12 13:35:37

标签: c# asp.net html regex

我需要执行一项任务,即从网页上获取一些html。在网页内有评论,我需要从评论中获取html。我希望下面的例子可以提供帮助。我需要在c#中完成它。

<!--get html from here-->
<div><p>some text in a tag</p></div>
<!--get html from here-->

我希望它返回

<div><p>some text in a tag</p></div>

我该怎么做?

4 个答案:

答案 0 :(得分:2)

如何找到第一个分隔符的索引,第二个分隔符的索引以及“裁剪”其间的字符串?听起来更简单,可能会有效。

答案 1 :(得分:2)

正则表达不适合HTML。如果你确实想要处理HTML的所有荣耀,请考虑HtmlAgilityPack,如本问题所述。 Looking for C# HTML parser

可能有效的最简单的事情是:

string pageBuffer=...;
string wrapping="<!--get html from here-->";
int firstHitIndex=pageBuffer.IndexOf(wrapping) + wrapping.Length;
return pageBuffer.Substring( firstHitIndex, pageBuffer.IndexOf( wrapping, firstHitIndex) - firstHitIndex));

(错误检查两个标记都存在)

根据您的上下文,WatiN可能很有用(如果您在服务器中,但是如果您在客户端,并且做一些可以从完整的HTML解析中受益的更有趣的事情,那就不是很有用了。)

答案 2 :(得分:2)

如果所有实例的格式都相似,则表达式为

<!--[^(-->)]*-->(.*)<!--[^(-->)]*-->

将检索两条评论之间的所有内容。如果您的评论中的“从此处获取html”文本已明确定义,则可以更具体:

<!--get html from here-->(.*)<!--get html from here-->

当您对字符串运行RegEx时,Groups集合将在注释之间包含HTML。

答案 3 :(得分:0)

我遇到了剥离HTML评论的要求。我一直在寻找一些基于正则表达式的解决方案,以便它可以开箱即用,提供自由风格的评论,并在其下面有任何类型的字符。

我试过它,它完美适用于单行,多行,带有Unicode字符和符号的注释。

<!--[\u0000-\u2C7F]*?-->