请教各位大侠,小弟现在写了个小程序,想用正则表达式抓取网页上的内容,比如csdn首页的热点资讯排行那一小块的内容,如果匹配的是<table[\s\S]*?/table>,匹配的结果需要自己手动验证结果里面含不含关键字"热点咨询",如何在正则里面直接实现?直接抓取含有关键字"热点咨询"table?
  注:首页里用的不是table标签,举例说明而已
  希望大家帮帮俺.谢谢各位了.

解决方案 »

  1.   

    用捕获组.            string str = @"<table>热点资讯</table><table></table>";    
                string pattern = "<table[^>]*?>(?<keyword>.*?)</table>";
                Regex regex = new Regex(pattern);
                MatchCollection mc = regex.Matches(str);
                foreach (Match m in mc)
                    Console.WriteLine(m.Groups["keyword"].Value);
                    Console.ReadKey();  
      

  2.   

    谢谢大家的回答,但是感觉还不是很对.比如我有这样一段文字<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>如果要匹配其中的"<a>123</a>",我该怎么做呢?比如"2"是关键字.楼上的话应该匹配的是"<a><a>123</a>"吧.还请大家点拨一下.
      

  3.   

    http://blog.csdn.net/keymo_/article/details/6927527
    认真看看,正则是经常要用的,学会如何用,而不是向别人求一段现成的表达式,程序员,不该这样
      

  4.   

    <table[\s\S]*?(热点资讯)[\s\S]*?/table>
      

  5.   

                string str = "<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
                Regex reg = new Regex("<a>(?:(?!</?a).)*2(?:(?!</?a).)*</a>");
                Console.WriteLine(reg.Match(str).Value);
      

  6.   

    有了具体内容才能去匹配,即便热点资讯是table 里面还可能套其他的table,那个时候上面就不适用了string tempStr = @"<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
                string keyword = "2";
                string pattern = @"<a[^>]*>[^<]+"+keyword+"[^<]*</a>";
                foreach (Match m in Regex.Matches(tempStr,pattern))
                {
                    //循环输出
                    string value = m.Value;
                    //<a>123</a>
                }
      

  7.   

                string text = "<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
                MatchCollection matchs = Regex.Matches(text, @"<a>(?<data>\d*[2]+\d*[^</a>]*)</a>");
                foreach (Match mh in matchs)
                    Console.WriteLine(string.Concat("regex:", mh.Groups[0],"  Value:", mh.Groups["data"]));
      

  8.   

    regex就是获取的html标签,data就是含有2的值。
      

  9.   

    string str = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\test.txt", System.Text.Encoding.GetEncoding("gb2312"));        Regex reg = new Regex(@"(?is)<a[^>]*?>[^<>]*?2[^>]*?>");
            foreach (Match m in reg.Matches(str))
            {
                Response.Write(m.Value + "<br/>");
            }这里,你只需要把那个a 换成你要匹配的标签就可以了。