在做提取网页正文的东西,用的HtmlAgilityPack 可是通过里面Document.InnerText()方法取出来的内容含有网页的注释信息,想把这些内容去除。如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">搜狐-中国最大的门户网站<!--2008.1.1-->
      .
      .
      .
<!--asfadsfg-->然后我是想通过正则表达式找出里面的注释以及第一段的信息,再将其删除,现在的正则表达式是这么写的:string patternNote = @"(<!--[\S\s].*?-->)|(<![\S\s].*?>)";
可是这样不能把<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
给匹配到,如果不用 . 可以找到换行的 可是是最大匹配 我想做最小匹配不知道怎么做,求大神们帮忙

解决方案 »

  1.   


                string str = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN""
     ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">sdjfksjfdlkdsjf<!--2008.1.1-->sjdfkjdd";            Regex regex = new Regex(@"(?is)<[^>]*?>");
                MatchCollection mc = regex.Matches(str);
                foreach (Match item in mc)
                    Console.WriteLine("匹配项:"+item.Value);            Console.WriteLine();
                str = regex.Replace(str, "");
                Console.WriteLine("去除注释之后:"+str);            Console.Read();
      

  2.   

    楼主的代码
    string patternNote = @"(<!--[\S\s].*?-->)|(<![\S\s].*?>)";
    用了[\s\S]表示任意字符,后面就不该再加小数点.了,小数点.匹配除换行符\n外的任意字符,所以这里匹配不了换行,去掉小数点可以满足你的要求
    string patternNote = @"(<!--[\S\s]*?-->)|(<![\S\s]*?>)";
    不过这样写效率比较低,可以用排除型字符组
    string patternNote = @"<![^>]*>";PS:由于这里不涉及到字母,也不涉及到小数点,所以不需要使用(?is)