正则表达式关键字匹配问题

wushuai1346 2011-05-31 02:35:56
请教各位大侠,小弟现在写了个小程序,想用正则表达式抓取网页上的内容,比如csdn首页的热点资讯排行那一小块的内容,如果匹配的是<table[\s\S]*?/table>,匹配的结果需要自己手动验证结果里面含不含关键字"热点咨询",如何在正则里面直接实现?直接抓取含有关键字"热点咨询"table?
注:首页里用的不是table标签,举例说明而已
希望大家帮帮俺.谢谢各位了.
...全文
237 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushuai1346 2011-11-16
  • 打赏
  • 举报
回复
谢谢大家
诺维斯基 2011-11-15
  • 打赏
  • 举报
回复
string str = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\test.txt", System.Text.Encoding.GetEncoding("gb2312"));

Regex reg = new Regex(@"(?is)<a[^>]*?>[^<>]*?2[^>]*?>");
foreach (Match m in reg.Matches(str))
{
Response.Write(m.Value + "<br/>");
}


这里,你只需要把那个a 换成你要匹配的标签就可以了。
Daqing 2011-11-15
  • 打赏
  • 举报
回复
regex就是获取的html标签,data就是含有2的值。
Daqing 2011-11-15
  • 打赏
  • 举报
回复
            string text = "<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
MatchCollection matchs = Regex.Matches(text, @"<a>(?<data>\d*[2]+\d*[^</a>]*)</a>");
foreach (Match mh in matchs)
Console.WriteLine(string.Concat("regex:", mh.Groups[0]," Value:", mh.Groups["data"]));
  • 打赏
  • 举报
回复
有了具体内容才能去匹配,即便热点资讯是table 里面还可能套其他的table,那个时候上面就不适用了

string tempStr = @"<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
string keyword = "2";
string pattern = @"<a[^>]*>[^<]+"+keyword+"[^<]*</a>";
foreach (Match m in Regex.Matches(tempStr,pattern))
{
//循环输出
string value = m.Value;
//<a>123</a>
}
huangwenquan123 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wushuai1346 的回复:]
谢谢大家的回答,但是感觉还不是很对.比如我有这样一段文字

XML code
<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>
如果要匹配其中的"<a>123</a>",我该怎么做呢?比如"2"是关键字.楼上的话应该匹配的是"<a><a>123</a>"吧.还请大家点拨一下.
[/Quote]
            string str = "<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>";
Regex reg = new Regex("<a>(?:(?!</?a).)*2(?:(?!</?a).)*</a>");
Console.WriteLine(reg.Match(str).Value);
路人乙e 2011-11-15
  • 打赏
  • 举报
回复
<table[\s\S]*?(热点资讯)[\s\S]*?/table>
KimoGao 2011-11-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/keymo_/article/details/6927527
认真看看,正则是经常要用的,学会如何用,而不是向别人求一段现成的表达式,程序员,不该这样
wushuai1346 2011-06-01
  • 打赏
  • 举报
回复
谢谢大家的回答,但是感觉还不是很对.比如我有这样一段文字
<a>abc</a><a><a>123</a><a>456</a><a>789</a></a>
如果要匹配其中的"<a>123</a>",我该怎么做呢?比如"2"是关键字.楼上的话应该匹配的是"<a><a>123</a>"吧.还请大家点拨一下.
kingdom_0 2011-05-31
  • 打赏
  • 举报
回复
用捕获组.

string str = @"<table>热点资讯</table><table></table>";
string pattern = "<table[^>]*?>(?<keyword>.*?)</table>";
Regex regex = new Regex(pattern);
MatchCollection mc = regex.Matches(str);
foreach (Match m in mc)
Console.WriteLine(m.Groups["keyword"].Value);
Console.ReadKey();
HDNGO 2011-05-31
  • 打赏
  • 举报
回复
。。。先花点时间看看正则吧。。。
否则做抓取和扯淡一样~·

110,533

社区成员

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

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

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