求一个正则表达式

monkey_zeng 2010-08-24 07:16:19
<div class="wdate">发表时间:2010-8-24 15:28:00</div>
<h2>标题</h2>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
</div>

我想从一网页HTML代码中提取出以上这一块内容,最根本的目的是提取<P></P>中的内容,这些内容都是文字。
现求一正则表达式,望大家帮帮手。
...全文
98 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-08-25
  • 打赏
  • 举报
回复
显然可以。

MatchCollection mc = Regex.Matches(html, @"(?is)<div class=""wdate"">.*?作者:黄正详.*?</div>(.*?<p>(?<data>.+?)</p>)+");
StringBuilder result = new StringBuilder();
foreach(Match m in mc)
{
foreach (Capture c in m.Groups["data"].Captures)
{
result.AppendLine(c.Value);//c.Value就是每一条的p中内容
}
}
Console.WriteLine(result.ToString());//这是所有的p中内容合起来后的结果
monkey_zeng 2010-08-25
  • 打赏
  • 举报
回复
提取多个Div中的内容这个问题解决了,
在HTML中有多个DIV块,其中“<div class="wdate">作者:黄正详</div>”这个块,我要提取作者的内容出来,按照楼上的方法,目前只能通过循环得到,如果不通过循环,能否直接通过一个正则表达式得到呢?
兔子-顾问 2010-08-25
  • 打赏
  • 举报
回复
如果有问题,继续跟帖, csdn 不一定会不会吧帖子顶上来,看不到时你可以发短信。
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 monkey_zeng 的回复:]
出现了新问题,发现在HTML里面<div class="wdate">的块不只一个,有四五个这样的DIV,提取后只能得到第一个Div块中的内容,还有人帮忙回答吗?
[/Quote]


MatchCollection mc = Regex.Matches(html, @"(?is)<div class=""wdate"">.+</div>(.*?<p>(?<data>.+?)</p>)+");
StringBuilder result = new StringBuilder();
foreach(Match m in mc)
{
foreach (Capture c in m.Groups["data"].Captures)
{
result.AppendLine(c.Value);//c.Value就是每一条的p中内容
}
}
Console.WriteLine(result.ToString());//这是所有的p中内容合起来后的结果
wxw6777 2010-08-24
  • 打赏
  • 举报
回复
经测试只取该DIV内了最后一个“<P>内容1</P>”,因为对正则式陌生,连错哪都不知道。
monkey_zeng 2010-08-24
  • 打赏
  • 举报
回复
出现了新问题,发现在HTML里面<div class="wdate">的块不只一个,有四五个这样的DIV,提取后只能得到第一个Div块中的内容,还有人帮忙回答吗?
Peter200694013 2010-08-24
  • 打赏
  • 举报
回复
又来晚了...
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 monkey_zeng 的回复:]
经测试只取该DIV内了最后一个“<P>内容1</P>”,因为对正则式陌生,连错哪都不知道。
[/Quote]

使用分组了。你用创建控制台程序,粘贴2楼代码。调用。就可以看到结果。需要遍历分组的Captures得到结果。
monkey_zeng 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyazhe 的回复:]
C# code
Match m = Regex.Match(html, @"(?is)<div class=""wdate"">.+</div>(.*?<p>(?<data>.+?)</p>)+");
StringBuilder result = new StringBuilder();
foreach (Capture c in m.Groups["data"].Captures)
{
……
[/Quote]


完美解决,非常感谢!!!!!!
monkey_zeng 2010-08-24
  • 打赏
  • 举报
回复
经测试只取该DIV内了最后一个“<P>内容1</P>”,因为对正则式陌生,连错哪都不知道。
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
Match m = Regex.Match(html, @"(?is)<div class=""wdate"">.+</div>(.*?<p>(?<data>.+?)</p>)+");
StringBuilder result = new StringBuilder();
foreach (Capture c in m.Groups["data"].Captures)
{
result.AppendLine(c.Value);//c.Value就是每一条的p中内容
}
Console.WriteLine(result.ToString());//这是所有的p中内容合起来后的结果
huanghan1988 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
(?is)<div class="wdate">.+</div>(.*?<p>(?<data>.+?)</p>)+
[/Quote]+1
wuyq11 2010-08-24
  • 打赏
  • 举报
回复
Regex reg = new Regex(@"(?is)<div\s+class=\"wdate\">(?:(?!</?div\b).)*</div>");
Match m = reg.Match(Str);
if (m.Success)
{
str+= = m.Value;
}
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
    private static void TestRegex12()
{
string html = @"<div class=""wdate"">发表时间:2010-8-24 15:28:00</div>
<h2>标题</h2>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
<P>内容1</P>
</div>
";
Match m = Regex.Match(html, @"(?is)<div class=""wdate"">.+</div>(.*?<p>(?<data>.+?)</p>)+");
StringBuilder result = new StringBuilder();
foreach (Capture c in m.Groups["data"].Captures)
{
result.AppendLine(c.Value);
}
Console.WriteLine(result.ToString());
}
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
(?is)<div class="wdate">.+</div>(.*?<p>(?<data>.+?)</p>)+

110,533

社区成员

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

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

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