正则表达式 MatchCollection匹配问题,求助!!

sharpriver 2008-03-27 11:15:30
请教各位大虾:
我想从string chushi 中读取<tr></tr>之间的内容,使用MatchCollection 进行匹配,正则表达式也通过测试,但是为什么程序中老是提示“索引超出了数组界限”这个问题啊?

chushi变量的定义:
string chushi =
RealTimeFxRate1_ExrateDataGrid\" style=\"height:25px;width:100%;background-image:url(../../images/right_content_bg.gif);\">\r\n\t
<tr>\r\n\t\t<td> ·港币->人民币</td><td>90.17</td>\r\n\t</tr>
<tr>\r\n\t\t<td> ·澳元->人民币</td><td>645.82</td>\r\n\t</tr>
<tr>\r\n\t\t<td> ·美元->人民币</td><td>701.60</td>\r\n\t</tr>
<tr>\r\n\t\t<td> ·欧元->人民币</td><\" height=\"32\">\r\n\t\t\t<table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" align=\"center\">\r\n\t\t\t\t<tr height=\"26\">\r\n\t\t\t\t\t<td width=\"33\"></td>\r\n\t\t\t\t\t<td class=\"white\">外汇实时汇率(中间价)</td>\r\n\t\t\t\t</tr>\r\n\t\t\t

程序:

Regex r = new Regex("<tr>(.*?\n*?)*?</tr>");
MatchCollection mc ;

try
{
mc= r.Matches(chushi);
if(mc.Count != 0)
{
……
}
……

求助~~
...全文
516 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackeyabc 2010-02-28
  • 打赏
  • 举报
回复
我看看是什么,回复太短?????????
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
调试过了,错误在这:
if(mc.Count != 0)
这一句执行不下去了呀,提示“索引超出了数组界限”
应该是mc没有匹配到东西的,但是因为啥不知掉呀
兔子-顾问 2008-03-27
  • 打赏
  • 举报
回复
很显然。错误不在你贴的代码里。debug方式调试,遇到错误就知道哪一行了。
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
刚那个是mc
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
跟踪过了呀:

{System.Text.RegularExpressions.MatchCollection}
System.Object: {System.Text.RegularExpressions.MatchCollection}
_beginning: 0
_done: false
_input: (这个太长,省去)
_length: 696
_matches: {Count=0}
_prevlen: -1
_regex: {System.Text.RegularExpressions.Regex}
_startat: 0
Count: <错误: 发生 {System.IndexOutOfRangeException} 类型的异常>
infinite: 2147483647
IsReadOnly: true
IsSynchronized: false
Item: <无法查看索引属性>
SyncRoot: {System.Text.RegularExpressions.MatchCollection}
wuhq030710914 2008-03-27
  • 打赏
  • 举报
回复

string chushi =" RealTimeFxRate1_ExrateDataGrid\" style=\"height:25px;width:100%;background-image:url(../../images/right_content_bg.gif);\">\r\n\t <tr>\r\n\t\t <td> ·港币->人民币 </td> <td>90.17 </td>\r\n\t </tr> <tr>\r\n\t\t <td> ·澳元->人民币 </td> <td>645.82 </td>\r\n\t </tr> <tr>\r\n\t\t <td> ·美元->人民币 </td> <td>701.60 </td>\r\n\t </tr> <tr>\r\n\t\t <td> ·欧元->人民币 </td> <\" height=\"32\">\r\n\t\t\t <table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" align=\"center\">\r\n\t\t\t\t <tr height=\"26\">\r\n\t\t\t\t\t <td width=\"33\"> </td>\r\n\t\t\t\t\t <td class=\"white\">外汇实时汇率(中间价) </td>\r\n\t\t\t\t </tr>\r\n\t\t\t";
Regex r = new Regex("<tr>(.*?\n*?)*?</tr>");
MatchCollection mc ;

try
{
mc= r.Matches(chushi);
if(mc.Count != 0)
{
MessageBox.Show("mc");
}
}
catch
{

}


测试过这样是不会报异常的,Count的值也是4
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
if是判断获取的是不是空,如果不是空的话再循环的。
mc.count 这句过不去,提示索引超出了数组界限
因为没有匹配到东西
但是正则表达式即应通过验证了,why?
求救~~
wuhq030710914 2008-03-27
  • 打赏
  • 举报
回复
试试将if(){}改为:

for (int i = 0; i < mc.Count; i++)
{

}
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
LZ检查一下是不是你的chushi 的拷贝或者是其他什么时候增加了一些不必要的空格,用你的代码在我这边是没有报异常的
-----------------------------------
你那里通过了我突然收到启发
我本来用的2003怎么都通不过,刚才试了试2005没有问题
Faint!
2003…………
sharpriver 2008-03-27
  • 打赏
  • 举报
回复
恩。就是你的省略号的部分有问题。你这样不贴完整。尤其把错误隐藏起来。我很怀疑楼主是不是故意灌水。
---------
省略号以下运行不到啊,我调试过了
兔子-顾问 2008-03-27
  • 打赏
  • 举报
回复
恩。就是你的省略号的部分有问题。你这样不贴完整。尤其把错误隐藏起来。我很怀疑楼主是不是故意灌水。
wuhq030710914 2008-03-27
  • 打赏
  • 举报
回复
LZ检查一下是不是你的chushi 的拷贝或者是其他什么时候增加了一些不必要的空格,用你的代码在我这边是没有报异常的

111,092

社区成员

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

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

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