2009-11-12 73 views
1

我需要执行一个任务是从网页中获取一些html。在网页内有评论,我需要从评论中获取html。我希望下面的例子可以帮助。我需要它在c#中完成。正则表达式来获得html没有评论

<!--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> 

我将如何做到这一点?

+3

参见:http://stackoverflow.com/questions/56107/what-is-the-best-way-to-parse-html-in-c – 2009-11-12 13:39:08

回答

2

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

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)); 

(错误检查两种标记均存在)

根据您的背景下,华廷可能是有用的(如果没有你在服务器中,但是如果你在客户端并且做了一些更有趣的事情,可以从完整的HTML解析中获益)。

2

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

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

将检索两个评论之间的所有内容。如果您的评论你的“获取HTML从这里”文本明确定义,你能更具体:

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

当您在该字符串运行正则表达式,Groups集合将包含注释之间的HTML。

+0

这是不对的。 '[^( - >)]'是一个字符类,它匹配除了'() - >'之外的任何**一个**字符。你可能会想到前瞻:'(?:(?! - >)。)*' - 零个或多个任何字符,除非接下来的三个字符是' - >'。这是一个非常常见的错误。 – 2009-11-12 14:12:40

+0

你应该也可以使用懒惰量词*?因为*是贪婪的并且会很高兴地吃掉一堆评论,直到它到达文档中的最后一个。 – 2009-11-12 15:15:20

+0

好点,两者。 – 2009-11-12 15:46:39

0

我遇到了这样一个剥离HTML注释的要求。我一直在寻找一些基于正则表达式的解决方案,这样它就可以使用自由风格的评论以及其下的任何类型的字符。

我试过了,它对于单行,多行,带有Unicode字符和符号的注释非常合适。

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