正则表达式CPU占用100%的问题

goscan 2010-03-29 12:50:43
[code=Html]作者:<a href="http://my.tianya.cn/13448121" class="link3" target="_blank">dada54</a> 回复日期:2007-09-06 12:19:02</font><span style="padding-left:10px;" class="wdk_user_status_span" id="wdk_user_dada54" title="dada54"></span></center></td><td align="right"><br/><font size ="-1" color="gray">839<font size="1">#</font></font></td></tr></table><!-- 回复内容 --><div style="word-wrap:break-word;"><div id="0f7150b3cb4bc4bebd6b291d8903ed1d" style="word-wrap:break-word;">都好看,很好笑!<br>每一个故事都有精华,值得关注的好帖<br>看来越画越棒了!<br>加油!<br><br/></div><!-- 显示图片 --></div><!-- 显示贴子回复,如果是分页第一条回复并且用户有管理权限,加上“多个隐藏”功能 --><table cellspacing=0 border=0 bgcolor="#F5F9FA" width=100% ><tr><td width="100" valign="bottom" align="right"/>                                  <td><font size="-1" color="green"><br/></font><center><font size="-1" color="green">[/code]

这是一段文本,我要从中取出:作者,回复时间,所在的楼数,以及回复的内容;
我用的正则表达式是
 <a.*?>(.*?)</a>.*?回复日期:(.*?)</font .*?>(\d{1,})<font.*?/font>.*?"><div.*?>(.*?)<br>

我用 the regulator工具能够正确的匹配到结果,而在C#中程序就会卡死
请高手指点一下,是什么原因,这段正则应该怎么改,谢谢大家了。
...全文
244 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbsi_skbcc 2010-03-29
  • 打赏
  • 举报
回复
.net源代码还原
QQ:9 282748 75
本团队提供.net源代码还原,后期处理,你只要提供.net程序,我们帮你完完全全的还原成 aspx+cs,工程包运行起来,源码完整无错,绝对是你做项目的帮手,
反编时间短,成果立即可现
为你大大节约开发周期
欢迎与我联系

资深的专家,为你节省时间,成本,项目当天或是几小时内便可以完成,做一个项目要花多少时间,要花多少费用,别人做好的,为何你还在苦苦开发!
还等什么呢,时间就是金钱

修改时间在两天内即可完成,快的一天就可改好

电话:
13672400434
邮箱:kbsi_skbcc@sina.com
goscan 2010-03-29
  • 打赏
  • 举报
回复
谢谢wuyazhe,问题解决,结贴
兔子-顾问 2010-03-29
  • 打赏
  • 举报
回复
改一下,显示的直观一点

string strContent = @"作者: <a href=""http://my.tianya.cn/13448121"" class=""link3"" target=""_blank"">dada54 </a> 回复日期:2007-09-06 12:19:02 </font> <span style=""padding-left:10px;"" class=""wdk_user_status_span"" id=""wdk_user_dada54"" title=""dada54""> </span> </center> </td> <td align=""right""> <br/> <font size =""-1"" color=""gray"">839 <font size=""1""># </font> </font> </td> </tr> </table> <!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">都好看,很好笑! <br>每一个故事都有精华,值得关注的好帖 <br>看来越画越棒了! <br>加油! <br> <br/> </div> <!-- 显示图片 --> </div> <!-- 显示贴子回复,如果是分页第一条回复并且用户有管理权限,加上“多个隐藏”功能 --> <table cellspacing=0 border=0 bgcolor=""#F5F9FA"" width=100% > <tr> <td width=""100"" valign=""bottom"" align=""right""/>                                   <td> <font size=""-1"" color=""green""> <br/> </font> <center> <font size=""-1"" color=""green"">";
string strPattern = @"(?is)作者: <a[^>]+>(?<author>[^<>]+)</a> 回复日期:(?<date>[\d\-]+) (?<time>[\d:]+).+?<font size =""-1"" color=""gray"">(?<floor>\d+).+<!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">(?<note>.+?)</div>";
Regex regExp = new Regex(strPattern, RegexOptions.Compiled);
Match m = regExp.Match(strContent);
int matchCount = 0;
while (m.Success)
{
Console.WriteLine("Match" + (++matchCount) + Environment.NewLine + Environment.NewLine);
Console.WriteLine("作者:" + Environment.NewLine + m.Groups["author"].Value + Environment.NewLine + Environment.NewLine +
"回复日期:" + Environment.NewLine + m.Groups["date"].Value + " " + m.Groups["time"] + Environment.NewLine + Environment.NewLine +
"回复内容:" + Environment.NewLine + Regex.Replace(m.Groups["note"].Value, "(?i)<br[ /]*>", "\r\n"));

m = m.NextMatch();
}
Console.ReadLine();


效果:

Match1


作者:
dada54

回复日期:
2007-09-06 12:19:02

回复内容:
都好看,很好笑!
每一个故事都有精华,值得关注的好帖
看来越画越棒了!
加油!
兔子-顾问 2010-03-29
  • 打赏
  • 举报
回复
测试例子

string strContent = @"作者: <a href=""http://my.tianya.cn/13448121"" class=""link3"" target=""_blank"">dada54 </a> 回复日期:2007-09-06 12:19:02 </font> <span style=""padding-left:10px;"" class=""wdk_user_status_span"" id=""wdk_user_dada54"" title=""dada54""> </span> </center> </td> <td align=""right""> <br/> <font size =""-1"" color=""gray"">839 <font size=""1""># </font> </font> </td> </tr> </table> <!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">都好看,很好笑! <br>每一个故事都有精华,值得关注的好帖 <br>看来越画越棒了! <br>加油! <br> <br/> </div> <!-- 显示图片 --> </div> <!-- 显示贴子回复,如果是分页第一条回复并且用户有管理权限,加上“多个隐藏”功能 --> <table cellspacing=0 border=0 bgcolor=""#F5F9FA"" width=100% > <tr> <td width=""100"" valign=""bottom"" align=""right""/>                                   <td> <font size=""-1"" color=""green""> <br/> </font> <center> <font size=""-1"" color=""green"">";
string strPattern = @"(?is)作者: <a[^>]+>(?<author>[^<>]+)</a> 回复日期:(?<date>[\d\-]+) (?<time>[\d:]+).+?<font size =""-1"" color=""gray"">(?<floor>\d+).+<!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">(?<note>.+?)</div>";
Regex regExp = new Regex(strPattern, RegexOptions.Compiled);
Match m = regExp.Match(strContent);
int matchCount = 0;
while (m.Success)
{
Console.WriteLine("Match" + (++matchCount));
Console.WriteLine("作者:" + m.Groups["author"].Value + Environment.NewLine +
"回覆日期:" + m.Groups["date"].Value + " " + m.Groups["time"] + Environment.NewLine +
"回复内容:" + Regex.Replace(m.Groups["note"].Value, "(?i)<br[ /]*>", "\r\n"));

m = m.NextMatch();
}
Console.ReadLine();

运行结果

Match1
作者:dada54
回覆日期:2007-09-06 12:19:02
回复内容:都好看,很好笑!
每一个故事都有精华,值得关注的好帖
看来越画越棒了!
加油!
兔子-顾问 2010-03-29
  • 打赏
  • 举报
回复

string strContent = @"作者: <a href=""http://my.tianya.cn/13448121"" class=""link3"" target=""_blank"">dada54 </a> 回复日期:2007-09-06 12:19:02 </font> <span style=""padding-left:10px;"" class=""wdk_user_status_span"" id=""wdk_user_dada54"" title=""dada54""> </span> </center> </td> <td align=""right""> <br/> <font size =""-1"" color=""gray"">839 <font size=""1""># </font> </font> </td> </tr> </table> <!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">都好看,很好笑! <br>每一个故事都有精华,值得关注的好帖 <br>看来越画越棒了! <br>加油! <br> <br/> </div> <!-- 显示图片 --> </div> <!-- 显示贴子回复,如果是分页第一条回复并且用户有管理权限,加上“多个隐藏”功能 --> <table cellspacing=0 border=0 bgcolor=""#F5F9FA"" width=100% > <tr> <td width=""100"" valign=""bottom"" align=""right""/>                                   <td> <font size=""-1"" color=""green""> <br/> </font> <center> <font size=""-1"" color=""green"">";
string strPattern = @"(?is)作者: <a[^>]+>(?<author>[^<>]+)</a> 回复日期:(?<date>[\d\-]+) (?<time>[\d:]+).+?<font size =""-1"" color=""gray"">(?<floor>\d+).+<!-- 回复内容 --> <div style=""word-wrap:break-word;""> <div id=""0f7150b3cb4bc4bebd6b291d8903ed1d"" style=""word-wrap:break-word;"">(?<note>.+?)</div>";
Regex regExp = new Regex(strPattern, RegexOptions.Compiled);
Match m = regExp.Match(strContent);
int matchCount = 0;
while (m.Success)
{
MessageBox.Show("Match" + (++matchCount));
MessageBox.Show("作者:" + m.Groups["author"].Value + Environment.NewLine +
"回覆日期:" + m.Groups["date"].Value + " " + m.Groups["time"] + Environment.NewLine +
"回复内容:" + Regex.Replace(m.Groups["note"].Value, "(?i)<br[ /]*>", "\r\n"));

m = m.NextMatch();
}
goscan 2010-03-29
  • 打赏
  • 举报
回复
我用the regulator工具能够正确的匹配到结果,不知道是什么原因,哪位大哥帮看看,谢谢了。
huminghua 2010-03-29
  • 打赏
  • 举报
回复
应该是内容的问题把!
goscan 2010-03-29
  • 打赏
  • 举报
回复
            strPattern = @"<a.*?>(.*?)</a>.*?回复日期:(.*?)</font .*?>(\d{1,})<font.*?/font>.*?""><div.*?>(.*?)<br>";
regExp = new Regex(strPattern, RegexOptions.Compiled);
Match mc = regExp.Match(strContent);
//MatchCollection mcs = regExp.Matches(strContent);
int matchCount = 0;
while (mc.Success)
{
Console.WriteLine("Match" + (++matchCount));
foreach (Group g in mc.Groups)
{
Console.WriteLine(g.Value);
}

mc = mc.NextMatch();
}

这个貌似没有什么问题, Match mc = regExp.Match(strContent);这句会卡住
threenewbee 2010-03-29
  • 打赏
  • 举报
回复
应该是你的程序有问题。

把程序贴上来。

110,535

社区成员

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

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

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