【发布时间】:2013-08-09 15:12:48
【问题描述】:
我正在使用下面的代码在网页中搜索数据并将数据返回给 da datagridview。
当我将它用于包含许多行(如 100)的网页时,有时它会返回一条错误的行 像这样: 考卡亚CE
而且应该只是考卡亚
为什么它只发生在 100 行中的 2 行?
这是我正在搜索的 html http://pastie.org/8220836
{
int i = 0;
Match matchLogradouro = Regex.Match(pagina, "<td width=\"268\" style=\"padding: 2px\">(.*)</td>");
Match matchBairroCidade = Regex.Match(pagina, "<td width=\"140\" style=\"padding: 2px\">(.*)</td>");
Match matchEstado = Regex.Match(pagina, "<td width=\"25\" style=\"padding: 2px\">([A-Z]{2})</td>");
Match matchCep = Regex.Match(pagina, "<td width=\"65\" style=\"padding: 2px\">(.*)</td>");
int z = Regex.Matches(pagina, "detalharCep").Count;
while (z > i -1)
{
dataGridView1.Rows.Add(matchLogradouro.Groups[1].Value);
matchLogradouro = matchLogradouro.NextMatch();
dataGridView1.Rows[i].Cells[1].Value = matchBairroCidade.Groups[1].Value;
matchBairroCidade = matchBairroCidade.NextMatch();
dataGridView1.Rows[i].Cells[2].Value = matchBairroCidade.Groups[1].Value;
matchBairroCidade = matchBairroCidade.NextMatch();
dataGridView1.Rows[i].Cells[3].Value = matchEstado.Groups[1].Value;
matchEstado = matchEstado.NextMatch();
dataGridView1.Rows[i].Cells[4].Value = matchCep.Groups[1].Value;
matchCep = matchCep.NextMatch();
i++;
}
}
【问题讨论】:
-
我看到很多贪婪的运算符...尝试在每个正则表达式中使用
(.*?)。 -
该死的@Corak,我正要写同样的东西! ^_^ 在那种情况下,总结一下...您是否尝试过使用 XML 解析器? :D
-
@Shaamaan - 这个。或Html Agility Pack
-
使用 (.*?) 解决了这个问题,但我决定停止偷懒,学习如何使用 Html Agility Pack。来自lazyberezovsky 的例子也有很大帮助!