首页 新闻 赞助 找找看

如何用正则表达式取特定HTML标签内内容?

0
悬赏园豆:50 [已解决问题] 解决于 2011-11-21 21:02

<dl>

<dt>       

  <span class="bdpy mr15 Bad">不推荐</span>       

  <span class="mr15 bold">打飞的(用户名)</span>发表于:2011-11-15(时间)

</dt>      

<dd>真的很一般,超一般,不过机场附近都这样,幸好还有个免费接送机服务让我有点安慰!(内容)</dd>

</dl>

 

用正则表达式同时获取<span class="mr15 bold"></span>标签内、<dd></dd>标签内、发表于:后(日期)的内容。怎么写?

Regex regx = new Regex("","")

  MatchCollection m = regx.Matches(html);

m集合最后返回的分组数据分别包含:用户名、时间、内容

 

缘鬼才的主页 缘鬼才 | 初学一级 | 园豆:51
提问于:2011-11-21 00:52
< >
分享
最佳答案
0

主要用到分组了,分组有两种方式,一种是直接把你需要的内容在正则上以一对小括号括起来,取值时按序号取组内的就行了,我用的另一种,是(?<组名>)这种方式。里面还用到了正负申明,是为了防止<dd></dd>中含有<dd>标签的情况。还是看我给你写的例子吧。

static void Main(string[] args)
{
string html = "<dl>" +
"<dt> " +
"<span class=\"bdpy mr15 Bad\">不推荐</span> " +
"<span class=\"mr15 bold\">打飞的(用户名)</span>发表于:2011-11-15(时间)" +
"</dt> " +
"<dd>真的很一般,超一般,不过机场附近都这样,幸好还有个免费接送机服务让我有点安慰!(内容)</dd>" +
"</dl>";
Regex regex = new Regex("<span class=\"mr15 bold\">(?<name>[\\w\\W]*)?</span>发表于:(?<time>[^<]*)[\\w\\W]*(?<=<dd>)(?<content>[\\w\\W]*)(?=</dd>\\s*</dl>)");
MatchCollection mc = regex.Matches(html);
foreach (Match m in mc)
{
Console.WriteLine("用户名:"+m.Groups["name"].Value+" 时间:"+m.Groups["time"].Value+" 内容:"+m.Groups["content"].Value);
Console.ReadKey();
}
}
收获园豆:45
LCM | 大侠五级 |园豆:6876 | 2011-11-21 01:55

如果有多个是匹配不上的,比如说有多个dl

 

<dl>

<dt>       

  <span >不推荐</span>       

  <span >打飞的(用户名)</span>发表于:2011-11-15(时间)

</dt>      

<dd>真的很一般,超一般,不过机场附近都这样,幸好还有个免费接送机服务让我有点安慰!(内容)</dd>

</dl>

 

<dl>

<dt>       

  <span >不推荐</span>       

  <span >打飞的(用户名)</span>发表于:2011-11-15(时间)

</dt>      

<dd>真的很一般,超一般,不过机场附近都这样,幸好还有个免费接送机服务让我有点安慰!(内容)</dd>

</dl>

<dl>

<dt>       

  <span >不推荐</span>       

  <span >打飞的(用户名)</span>发表于:2011-11-15(时间)

</dt>      

<dd>真的很一般,超一般,不过机场附近都这样,幸好还有个免费接送机服务让我有点安慰!(内容)</dd>

</dl>

缘鬼才 | 园豆:51 (初学一级) | 2011-11-21 14:41

@缘鬼才: 怎么这一段html的用户名前标签里面没有下面的属性?

class="mr15 bold"
LCM | 园豆:6876 (大侠五级) | 2011-11-21 15:48
其他回答(2)
0
<span class="mr15 bold">(?<username>.*?)</span>发表于:(?<time>[^<]*?)</dt>[\w\W]*<dd>(?<content>.*?)</dd>

username,time,content就是你要的

不过楼上的好像更强大

收获园豆:5
artwl | 园豆:16736 (专家六级) | 2011-11-21 09:24
0
喬喬AI | 园豆:996 (小虾三级) | 2011-11-21 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册