正则表达式匹配的问题

水手carl 2009-10-16 11:44:27

<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=6></TD></TR></TBODY></TABLE><FONT class=p6 color=#3366cc>●</FONT></TD>
<TD vAlign=center width="75%" height=20><A class=a2 href="t20090911_402586300.htm" target=_blank>8月份国民经济主要指标数据</A></TD>
<TD class=a2 vAlign=center width="20%" height=20>2009年09月11日</TD></TR>
<TR>
<TD vAlign=top align=middle width="5%" height=25>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=6></TD></TR></TBODY></TABLE><FONT class=p6 color=#3366cc>●</FONT></TD>
<TD vAlign=center width="75%" height=20><A class=a2 href="t20090910_402585842.htm" target=_blank>1-8月全国房地产市场运行情况</A></TD>
<TD class=a2 vAlign=center width="20%" height=20>2009年09月10日</TD></TR>
<TR>
<TD vAlign=top align=middle width="5%" height=25>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=6></TD></TR></TBODY></TABLE><FONT class=p6 color=#3366cc>●</FONT></TD>
<TD vAlign=center width="75%" height=20><A class=a2 href="t20090901_402583588.htm" target=_blank>8月份全国制造业采购经理指数继续回升</A></TD>
<TD class=a2 vAlign=center width="20%" height=20>2009年09月01日</TD></TR>
<TR>
<TD vAlign=top align=middle width="5%" height=25>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=6></TD></TR></TBODY></TABLE><FONT class=p6 color=#3366cc>●</FONT></TD>
<TD vAlign=center width="75%" height=20><A class=a2 href="t20090828_402582842.htm" target=_blank>1-7月份工业利润降幅继续缩小</A></TD>
<TD class=a2 vAlign=center width="20%" height=20>2009年08月28日</TD></TR>
<TR>
<TD vAlign=top align=middle width="5%" height=25>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=6></TD></TR></TBODY></TABLE><FONT class=p6 color=#3366cc>●</FONT></TD>
<TD vAlign=center width="75%" height=20><A class=a2 href="t20090811_402578483.htm" target=_blank>7月份国民经济主要指标数据</A></TD>
<TD class=a2 vAlign=center width="20%" height=20>2009年08月11日</TD></TR>


以上这段html中我需要匹配出“*月份国民经济主要指标数据”对应的链接,现在我写的表达式如下:
<td.*?href="(?<href>.*?(?="))".*?(?<title>\d{1,2}月份国民经济主要指标数据).*?/td>

撇开上面我的写法,我的实际需求是:
找出页面中有的最大的月份对应的“国民经济主要指标数据”的链接

如:
加入存在
10月份国民经济主要指标数据 和 9月份国民经济主要指标数据

我只匹配到10月份的数据

请问各位大虾:

一个正则表达式能否实现,以及如何实现
或者有什么更好的方式?

...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2009-10-16
  • 打赏
  • 举报
回复
正则不能直接做非string类的操作,还是要逐个匹配判断的

string url = string.Empty;
int temp = 0;
Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>\s*(?<mon>\d+)月份国民经济主要指标数据\s*</a>");
reg.Replace(yourStr, delegate(Match m) { if (Convert.ToInt32(m.Groups["mon"].Value) > temp) { temp = Convert.ToInt32(m.Groups["mon"].Value); url = m.Groups["url"].Value; } return ""; });
richTextBox2.Text = url;
-过客- 2009-10-16
  • 打赏
  • 举报
回复
正则不能直接做非string类的操作,还是要逐个匹配判断的

string url = string.Empty;
int temp = 0;
Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>\s*(?<mon>\d+)月份国民经济主要指标数据\s*</a>");
reg.Replace(yourStr, delegate(Match m) { if (Convert.ToInt32(m.Groups["mon"].Value) > temp) { temp = Convert.ToInt32(m.Groups["mon"].Value); url = m.Groups["url"].Value; } return ""; });
richTextBox2.Text = url;
feebas 2009-10-16
  • 打赏
  • 举报
回复
我学过一段时间,不明白
James__Zhan 2009-10-16
  • 打赏
  • 举报
回复
你的题目信息不是很清楚,没有看到你的页面中有这个数据。
不过如果只是查到link的话,比较简单。
试试:
<a\s*href\s*=\s*"([^"]+)"[^>]+>\s*\(d{1,2}月份国民经济主要指标数据)\s*</a>

分了两组,Group[1]是link
Group[2]是titile

希望这个可以给你点帮助。
mythad 2009-10-16
  • 打赏
  • 举报
回复
没看到过正则表达式能匹配最大值或进行计算的。
zw880322 2009-10-16
  • 打赏
  • 举报
回复
正则表达式我不是很会
你可以使用HtmlAgilityPack来查找(这个网上游很多)

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.Load(url);//url是你要获取数据的网页路劲
HtmlNodeCollection nodes = htmlDoc.DocumentNode.SelectNodes("//a");//这里获取所有的超链接,最后循环获取每个HtmlNode,HtmlNode.InnerText是获取去除标签后的内容,比较下时间久可以通过HtmlNode.Attributes["href"].Value来获取链接地址

110,534

社区成员

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

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

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