高手请进,这个正则表达式搞的我一夜没睡!

windstore 2007-06-04 05:53:24
事先说下哦:我只想找到为什么我的这个会出错,这个是最主要的。。。改良写法嘛也可以给,但是帮我找到我错的原因是最重要的哦。。

因为我写的正则用 Code Architects Regex Tester是可以匹配出结果啊,这个正则工具也是用.Net写的,为啥在这个程序里就不行了?难道不是正则的问题?我看了一晚上实在看不到那里的问题.

MatchCollection mc = Regex.Matches(str_html, @"<table\s+border[^>]+>\s*<tr>\s*<td\s+height[^>]+>(?<date>[^&]+)  (?<week>[^<]+)<br>\s*<SCRIPT\s+language[^>]+>\s*[^<]+</SCRIPT>[^<]+<a[^>]+>\s*<font[^>]+>[^<]+</font>\s*</a>\s*\|\s*<a[^>]+>\s*<font[^>]+>[^<]+</font>\s*</a>\s*</td>\s*</tr>\s*</table>\s*<table[^>]+>\s*<tr[^>]+>\s*<td[^>]+>\s*<a[^>]+>\s*<img[^>]+>\s*</a>\s*</td>\s*<td\s+class=blu01>\s*(?<weather>[\u4e00-\u9fa5]+)\s*<br>\s*(?<temperature>[^<]+)<br>\s*(?<wind>[^<]+)<br>", RegexOptions.IgnoreCase);

要匹配的字符串如下:
<table border=0 cellpadding=0 cellspacing=0 width=186 bgcolor=#ffffff class=gra01>
<tr>
<td height=50 style=padding-left:6px>2007年6月6日  星期三<br>
<SCRIPT language=javascript>
var today = new Date();
var thedayaftertomorrow= new Date(today.getTime() + 1000*60*60*24*2);
var str = GetLunarDateString(thedayaftertomorrow);
document.writeln(str);
</SCRIPT>   
<a href=http://sms.sohu.com/book/book.php?id=26 target=_blank>
<font color=#CF6C06>黄历</font></a>
|<a href=http://sms.sohu.com/book/book.php?id=21 target=_blank>
<font color=#CF6C06>星座</font></a>
</td> </tr>
</table>
<table border=0 cellpadding=0 cellspacing=0 width=186 bgcolor=#ffffff>
<tr style=padding-bottom:8px>
<td width=100 align=center><a href="./city.php?city=上海" target=_blank><img src="http://img.sms.sohu.com/i/weather/images/yzdy_01.gif" width=83 height=65 alt=阴转多云 border=0 class=img2></a></td>
<td class=blu01>阴转多云<br>
27℃~21℃<br>
东风3-4级
<br>
...全文
269 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
windstore 2007-06-04
  • 打赏
  • 举报
回复
我快吐血了。。刚才才发现是源字符串的问题。唉。SOHU太那个了,我采集它的天气,返回的内容居然是"没有值",我说呢。。晕倒! 这个表达式没有问题 呵呵 。。谢谢大家
神奇的章鱼哥 2007-06-04
  • 打赏
  • 举报
回复
关于正则,只顶不看……
一切相信过客的
-过客- 2007-06-04
  • 打赏
  • 举报
回复
我测试了,无论在正则工具中,还是在vs.net下都可以得到正确结果,而且正则的写法也是比较规范的

你的源字符串是如何得到的,问题可能出在这里,如果问题还没解决,贴一下其它的相关代码吧
photoplan 2007-06-04
  • 打赏
  • 举报
回复
您的正则表达式没问题,这个模式与整个字符串有一个匹配,匹配中有6个组,各组的值是:
[0] 原始串
[1] 2007年6月6日
[2] 星期三
[3] 阴转多云
[4] 27℃~21℃
[5] 东风3-4级

难为你写这么长的模式,我建议您多写几个模式,每个模式取一个值。

windstore 2007-06-04
  • 打赏
  • 举报
回复
救命~~~!

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧