我在做一个扫描起点的小程序,用来做本地搜索,比方说搜索字数30w-40w之间的书籍等等,现在有个正则表达式稿不定了数据 &nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=1\" target=\"_blank\">西方奇幻</a>&nbsp;&nbsp;|&nbsp;&nbsp;专栏作者:代码rExp="&nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=(?:[\\d]+)\" target=\"_blank\">([^<]*)</a>&nbsp;&nbsp;\\|&nbsp;&nbsp;专栏作者:";
m=Regex.Match(resContent,rExp,RegexOptions.Singleline);
if(m.Success)
SmallClass=m.Result("$1");

解决方案 »

  1.   

    先replace("&nbsp;","")之后,再用取href的正则
      

  2.   

    不是太明白,你是要这个结果吗
                string test = "数据 &nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=1\" target=\"_blank\">西方奇幻</a>&nbsp;&nbsp;|&nbsp;&nbsp;专栏作者:";
                string result = "";
                Match m = Regex.Match(test, @"<a\s+href=""[^""]*?(?<num>\d+)""[^>]*>", RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    result = m.Groups["num"].Value;
                }如果不是,具体说明一下
      

  3.   

    1、数据是一个完整的网页,我只不过写了其中一小段2、我能保证我列出来的一段字符串在整个网页中是唯一的,不需要考虑重复问题3、我要取得地字符串是2个,一个是 bl_class=1中的1,这里1有可能是任何数字,第二个是 西方奇幻 
      

  4.   

    如果是本地搜索,那应该是大量文本才对,你这里只是取一个字符串中的一个数字,所以我这样写了,而且Match取到的结果也只是一个,如果取多个,用MatchCollection,正则也需要做相应的改变说下要从什么样的字符串中取出什么样的子串,取一个还是多个,有什么样的规律
      

  5.   

    哪一部分可以确保它唯一,如果是
    listbook.asp?bl_class=
    这一部分,那可以这样试下,其中test换成你的完整网页代码
                string test = "数据 &nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=1\" target=\"_blank\">西方奇幻</a>&nbsp;&nbsp;|&nbsp;&nbsp;专栏作者:";
                string num = "";
                string text = "";
                Match m = Regex.Match(test, @"<a\s+href=""listbook.asp\?bl_class=(?<num>\d+)""\s+target=""_blank"">(?<text>[^<]*)</a>", RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    num = m.Groups["num"].Value;  
                    text = m.Groups["text"].Value;
                }
      

  6.   

    完整的数据是 "<html><head>*****标准html代码******&nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=1\" target=\"_blank\">西方奇幻</a>&nbsp;&nbsp;|&nbsp;&nbsp;专栏作者:*****标准html代码******</body></html>"
    也就是说,是一个完整的网页这一个网页中, 
     &nbsp;&nbsp;类别:<a href=\"listbook.asp?bl_class=1\" target=\"_blank\">西方奇幻</a>&nbsp;&nbsp;|&nbsp;&nbsp;专栏作者:
    这一段文字仅会出现一次我要的  是 listbook.asp?bl_class=1 中的 1 ,还有 西方玄幻,一个是类别ID,一个是类别名称
      

  7.   

    我已经成功了rExp="&nbsp;&nbsp;类别:<a href=\"listbook.asp\\?bl_class=\\d+\" target=\"_blank\">([^<]*)</a>&nbsp;&nbsp;\\|&nbsp;&nbsp;专栏作者:";我这里只需要取类别名称,所以bl_class=\\d+,如果要取ID则改为bl_class=(\\d+)就行了
    我的错误是没有注意到 listbook.asp?bl_class=1中的 ? 是特殊字符,现在加上转义就ok了
      

  8.   

    不过仍然要感谢 lxcnn(过客),100分给你了
      

  9.   

    如果
    listbook.asp?bl_class=
    就可以保证这个子串在页面唯一,按我上面写的,或是改成下面这个就可以了Match m = Regex.Match(test, @"<a\s+href=""listbook.asp\?bl_class=(?<num>\d+)""[^>]*>(?<text>[^<]*)</a>", RegexOptions.IgnoreCase);如果需要加上“类别:”才能保证,那就这样Match m = Regex.Match(test, @"类别:\s*<a\s+href=""listbook.asp\?bl_class=(?<num>\d+)""[^>]*>(?<text>[^<]*)</a>", RegexOptions.IgnoreCase);