首页新闻找找看学习计划

正则表达式取ul下面的li的值

0
悬赏园豆:30 [已解决问题] 解决于 2013-08-16 16:24
<ul class=\"listnew\">\r\n \r\n <li>\r\n <a href=\"html/2012-10-30/85775.shtml\" target=\"_blank\">建筑学专业办学30周年庆典举行[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-30</font></li>\r\n \r\n <li>\r\n <a href=\"html/2012-10-29/85761.shtml\" target=\"_blank\">舟山市代表团来校访问[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-29</font></li>\r\n  \r\n <li>\r\n <a href=\"html/2012-10-29/85760.shtml\" target=\"_blank\">我校与西电集团共建国家级工程实践教育中心[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-29</font></li>\r\n \r\n <li>\r\n <a href=\"html/2012-10-
26/85722.shtml\" target=\"_blank\">我校新添一项2012年国家社科基金重大项目</a>\r\n <font color=\"#aaaaaa\">2012-10-26</font></li>\r\n \r\n</ul>

 

 

我远程取到的数据如上图,我用如下正则取LI的值,
Regex GetLi =new Regex(@"<li><a href=""html/2012-10-29/85761.shtml"" target=""_blank"">(?<item1>[^/]+)</a><font color=""#aaaaaa"">(?<item2>[^/]+)</font></li>");

但我一条都取不到。我想达到的效果是取到li的文字,url,li里面的两个font里面的值

拿第一条为例

<li><a href=\"html/2012-10-30/85775.shtml\" target=\"_blank\">建筑学专业办学30周年庆典举行[<font color=red>图</font>]</a><font color=\"#aaaaaa\">2012-10-30</font></li><li>

取到1.html/2012-10-30/85775.shtml  2.建筑学专业办学30周年庆典举行  3.[图]  4.2012-10-30

我该如何写这个正则表达式。

问题补充:

我修改了一下正则

<li><a href=\"(?<url>[^\"]+)\" target=\"_blank\">(?<item1>[^\[]+)</a><font color=\"#aaaaaa\">(?<item2>[^<]+)</font></li>

wavegui的主页 wavegui | 初学一级 | 园豆:80
提问于:2012-10-30 13:29
< >
分享
最佳答案
0

正则的确好用,不过有些东西用它就是大炮打蚊子

楼主这个功能 用字符串截取一样好使:

string str=你的字符串

list<string> list=new list();   //放结果的泛型集合

string [] strArray=str.split("\li");    //一组一组的li标签

foreach(string item in strArray)

{

  list.add(item.substring(item.indexof("li")));

}

 

代码没在环境里写,大概思路就是这样的,多在即时窗口里多调整下substring参数 一样能很出结果

收获园豆:15
oppoic | 小虾三级 |园豆:560 | 2012-10-30 13:49

使用你那个方式好像也不行


strArray[0].ToString()
"<ul class=\"listnew\">\r\n \r\n <li>\r\n <a href=\"html/2012-10-30/85775.shtml\" target=\"_blank\">建筑学专业办学30周年庆典举行[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-30</font><"

strArray[1].ToString()
">\r\n \r\n <li>\r\n <a href=\"html/2012-10-29/85761.shtml\" target=\"_blank\">舟山市代表团来校访问[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-29</font><"

 


strArray[2].ToString()
">\r\n  \r\n <li>\r\n <a href=\"html/2012-10-29/85760.shtml\" target=\"_blank\">我校与西电集团共建国家级工程实践教育中心[<font color=red>图</font>]</a>\r\n <font color=\"#aaaaaa\">2012-10-29</font><"

wavegui | 园豆:80 (初学一级) | 2012-10-30 14:42

@wavegui: 明白你的意思了,你的问题出在 截取后html元素太多了,无法区分,用正则也不好写

网上有个叫取出html元素的东西 楼主你试试  就是带各种html标签的字符串进去 返回取出所有html标签的字符串
,你把集合中的每个元素都调用下这个方法 看看结果是什么

 

提供一个,网上其实有很多

 public static string NoHTML(string Htmlstring)
        {
            //删除脚本
            Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
            //删除HTML
            Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);

            Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
            Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);

            Htmlstring.Replace("<", "");
            Htmlstring.Replace(">", "");
            Htmlstring.Replace("\r\n", "");
            //Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();

            return Htmlstring.Trim();
        }

这样的话思路清晰很多了,先根据</li>分组放入泛型集合 然后集合里的每个元素都去除html标签 那么剩下来的肯定是正常的内容了,多试试吧

oppoic | 园豆:560 (小虾三级) | 2012-10-30 15:41

@心态要好: 

没有用你这个全部替换,不过是一种思路。刚开始搞正则,头昏

wavegui | 园豆:80 (初学一级) | 2012-10-31 13:54
其他回答(2)
0

恩,同意楼上的思路……

ms_water | 园豆:510 (小虾三级) | 2012-10-30 14:16
0

楼主获取到了页面上的文本信息,把 \r\n全部去除,然后通过正则

href=\\"\w+/(\d|[-]|[/])+[.]\w+\\"\s*target=\\"_blank\\">([\u4e00-\u9fa5]|\w)+([[]<font\s*color=red>图</font>[]])?</a>

然后获取到的信息如下:

href=\"html/2012-10-30/85775.shtml\" target=\"_blank\">建筑学专业办学30周年庆典举行[<font color=red>图</font>]</a>
href=\"html/2012-10-29/85761.shtml\" target=\"_blank\">舟山市代表团来校访问[<font color=red>图</font>]</a>
href=\"html/2012-10-29/85760.shtml\" target=\"_blank\">我校与西电集团共建国家级工程实践教育中心[<font color=red>图</font>]</a>
href=\"html/2012-10-26/85722.shtml\" target=\"_blank\">我校新添一项2012年国家社科基金重大项目</a>

剩下的就循环找自己想要的信息就行了

给楼主介绍一个正则网站 http://www.jb51.net/tools/zhengze.htm  这个对我帮助挺大的,希望对楼主也有帮助

收获园豆:15
墨猦 | 园豆:668 (小虾三级) | 2012-11-02 15:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册