<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>
正则的确好用,不过有些东西用它就是大炮打蚊子
楼主这个功能 用字符串截取一样好使:
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参数 一样能很出结果
使用你那个方式好像也不行
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: 明白你的意思了,你的问题出在 截取后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标签 那么剩下来的肯定是正常的内容了,多试试吧
@心态要好:
没有用你这个全部替换,不过是一种思路。刚开始搞正则,头昏
恩,同意楼上的思路……
楼主获取到了页面上的文本信息,把 \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 这个对我帮助挺大的,希望对楼主也有帮助