C# 正则表达式以获取不带注释的html

C# 正则表达式以获取不带注释的html,c#,asp.net,html,regex,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>

我需要执行一项任务,就是从网页中获取一些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>

我该怎么做呢???

如何查找第一个分隔符的索引,第二个分隔符的索引,并在两者之间裁剪字符串?听起来更简单,可能会和其他方法一样有效。

如何查找第一个分隔符的索引,第二个分隔符的索引,并在两者之间裁剪字符串?听起来简单多了,可能和HTML一样有效。

正则表达式不适合HTML。如果你真的想在所有的荣耀中处理HTML,请考虑HtmlAgilityPack在这个问题中所讨论的。 最简单的可行方法是:

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解析中受益,WatiN可能会很有用。

正则表达式不适合HTML。如果你真的想在所有的荣耀中处理HTML,请考虑HtmlAgilityPack在这个问题中所讨论的。 最简单的可行方法是:

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解析中获益。

如果所有实例的格式都类似,则可以使用如下表达式

<!--[^(-->)]*-->(.*)<!--[^(-->)]*-->
将检索两个注释之间的所有内容。如果注释中的“从此处获取html”文本定义良好,则可以更具体:

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

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

如果所有实例的格式都类似,则使用如下表达式

<!--[^(-->)]*-->(.*)<!--[^(-->)]*-->
将检索两个注释之间的所有内容。如果注释中的“从此处获取html”文本定义良好,则可以更具体:

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

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

我遇到了这样一个要求,即去掉HTML注释。我一直在寻找一些基于正则表达式的解决方案,这样它就可以进行开箱即用的自由风格的评论,并且在它们下面有任何类型的字符

我试过了,它对单行、多行、带有Unicode字符和符号的注释都非常有效

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

我遇到了这样一个要求去掉HTML注释的情况。我一直在寻找一些基于正则表达式的解决方案,这样它就可以进行开箱即用的自由风格的评论,并且在它们下面有任何类型的字符

我试过了,它对单行、多行、带有Unicode字符和符号的注释都非常有效

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

看:看:那是错误的。[^->]是一个字符类,它匹配除->之外的任何一个字符。您可能正在考虑前瞻:?:?!->任何字符的零个或多个,除非后面三个字符为->。这是一个非常常见的错误。您可能还应该使用惰性量词*?对于您捕获的表达式,因为*是贪婪的,并且会很高兴地吃掉一堆注释,直到它到达文档中的最后一个。这是错误的。[^->]是一个字符类,它匹配除->之外的任何一个字符。您可能正在考虑前瞻:?:?!->任何字符的零个或多个,除非后面三个字符为->。这是一个非常常见的错误。您可能还应该使用惰性量词*?对于您捕获的表达式,因为*是贪婪的,并且会很高兴地吃掉一堆注释,直到它到达文档中的最后一条。