<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集合最后返回的分组数据分别包含:用户名、时间、内容
主要用到分组了,分组有两种方式,一种是直接把你需要的内容在正则上以一对小括号括起来,取值时按序号取组内的就行了,我用的另一种,是(?<组名>)这种方式。里面还用到了正负申明,是为了防止<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();
}
}
如果有多个是匹配不上的,比如说有多个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>
@缘鬼才: 怎么这一段html的用户名前标签里面没有下面的属性?
class="mr15 bold"
<span class="mr15 bold">(?<username>.*?)</span>发表于:(?<time>[^<]*?)</dt>[\w\W]*<dd>(?<content>.*?)</dd>
username,time,content就是你要的
不过楼上的好像更强大