请问用正则表达式如何取如下table里面的各行,各列里面的数据值。
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
title
</title>
</head>
<body>
    <form name="form1" method="post" action="Index.aspx" id="form1"> <span id="XmlIndex1">
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="Table2" class="selPage" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <tr>
    <td width="428" height="30" class="tabTitleLabel pdLeft">指数</td>
    <td width="25">&nbsp;</td>
    <td width="220" align="center" class="tabTitleLabel">LAST</td>
    <td align="center" class="tabTitleLabel">%CHG</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">美国道琼斯工业指数</td>
    <td align="center" class="bgF1"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">12949.87</td>
    <td align="center" class="tabNote bgF1">0.35</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft">纳斯达克指数</td>
    <td align="center"><img alt="" src="/images/downArraw.jpg"></td>
    <td align="center" class="tabNote">2951.78</td>
    <td align="center" class="tabNote">-0.27</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">日本日经指数</td>
    <td align="center" class="bgF1"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">9485.09</td>
    <td align="center" class="tabNote bgF1">1.08</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft">香港恒生指数</td>
    <td align="center"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote">21566.42</td>
    <td align="center" class="tabNote">0.35</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">上证指数</td>
    <td align="center" class="bgF1"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">2370.23</td>
    <td align="center" class="tabNote bgF1">0.55</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft">深证综指</td>
    <td align="center"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote">9654.27</td>
    <td align="center" class="tabNote">0.41</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">澳洲综合指数</td>
    <td align="center" class="bgF1"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">4332.80</td>
    <td align="center" class="tabNote bgF1">1.39</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft">NZSE50</td>
    <td align="center"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote">3315.57</td>
    <td align="center" class="tabNote">0.81</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">伦敦金融时报</td>
    <td align="center" class="bgF1"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">5905.07</td>
    <td align="center" class="tabNote bgF1">0.33</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft">S&amp;P 500</td>
    <td align="center"><img alt="" src="/images/upArraw.jpg"></td>
    <td align="center" class="tabNote">1361.23</td>
    <td align="center" class="tabNote">0.23</td>
  </tr>
  <tr>
    <td height="27" class="tabNote pdLeft bgF1">多伦多综合指数</td>
    <td align="center" class="bgF1"><img alt="" src="/images/downArraw.jpg"></td>
    <td align="center" class="tabNote bgF1">12458.30</td>
    <td align="center" class="tabNote bgF1">-0.22</td>
  </tr>
</table>
</span>

 
    </form>
</body>
</html>

解决方案 »

  1.   

    trystring strSource = "<tr>"+
        "<td height=\"27\" class=\"tabNote pdLeft bgF1\">澳洲综合指数</td>"+
        "<td align=\"center\" class=\"bgF1\"><img alt=\"\" src=\"/images/upArraw.jpg\"></td>"+
      "</tr>"+
      "<tr>"+
        "<td align=\"center\" class=\"tabNote\">3315.57</td>"+
        "<td align=\"center\" class=\"tabNote\">0.81</td>"+
      "</tr>";            MatchCollection mc = Regex.Matches(strSource, @"(?is)(?<=(<td[^>]*>))(?:(?!</?td\b).)*(?=</td>)");
                for (int i = 0; i < mc.Count; i++)
                {
                    Console.WriteLine("Group[0]:" + mc[i].Value + "\n");
                }
    CW result:
    //Group[0]:澳洲综合指数
    //Group[0]:<img alt="" src="/images/upArraw.jpg">
    //Group[0]:3315.57
    //Group[0]:0.81
      

  2.   

    楼上的不行哦,我要的是整个html去匹配,
    你只写这个一段可以,但是应用在整个html数据就出不来了哦。
      

  3.   

    用htmlagilitypack:
    string s = File.ReadAllText(Server.MapPath("~/test.txt"));
    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(Server.HtmlDecode(s));
    HtmlNodeCollection trs = htmlDoc.DocumentNode.SelectNodes(@"//span[@id='XmlIndex1']/table/tr");
    foreach (HtmlNode tr in trs)
    {
    foreach (HtmlNode td in tr.ChildNodes)
    Response.Write(td.InnerText + " ");
    Response.Write("<br/>");
    }
    指数   LAST %CHG 
    美国道琼斯工业指数 12949.87 0.35 
    纳斯达克指数 2951.78 -0.27 
    日本日经指数 9485.09 1.08 
    香港恒生指数 21566.42 0.35 
    上证指数 2370.23 0.55 
    深证综指 9654.27 0.41 
    澳洲综合指数 4332.80 1.39 
    NZSE50 3315.57 0.81 
    伦敦金融时报 5905.07 0.33 
    S&P 500 1361.23 0.23 
    多伦多综合指数 12458.30 -0.22 
      

  4.   

    而且楼上的大哥,你这不是正则表达式吧,是xpath吧。
      

  5.   

    原字符串就是这样?那直接获取各个td的值就可以了。还是要获取id="Table2"里的table各个列的值?            string str = File.ReadAllText(@"E:\1.txt", Encoding.GetEncoding("gb2312"));
                Regex reg = new Regex(@"(?is)<td[^>]*?>(.*?)</td>");
                foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Groups[1].Value);
      

  6.   

    取id="Table2"里的table各个列的值
    多谢,再帮帮忙。
      

  7.   

                string str = File.ReadAllText(@"E:\1.txt", Encoding.GetEncoding("gb2312"));
                Regex reg = new Regex(@"(?is)<table[^>]*?id=""Table2""[^>]*?>(?:\s*<tr>(?:\s*<td[^>]*?>(.*?)</td>){4}\s*</tr>)*\s*</table>");
                foreach (Capture c in reg.Match(str).Groups[1].Captures)
                    Console.WriteLine(c.Value);
    /*
    指数
    &nbsp;
    LAST
    %CHG
    美国道琼斯工业指数
    <img alt="" src="/images/upArraw.jpg">
    12949.87
    0.35
    纳斯达克指数
    <img alt="" src="/images/downArraw.jpg">
    2951.78
    -0.27
    日本日经指数
    <img alt="" src="/images/upArraw.jpg">
    9485.09
    1.08
    香港恒生指数
    <img alt="" src="/images/upArraw.jpg">
    21566.42
    0.35
    上证指数
    <img alt="" src="/images/upArraw.jpg">
    2370.23
    0.55
    深证综指
    <img alt="" src="/images/upArraw.jpg">
    9654.27
    0.41
    澳洲综合指数
    <img alt="" src="/images/upArraw.jpg">
    4332.80
    1.39
    NZSE50
    <img alt="" src="/images/upArraw.jpg">
    3315.57
    0.81
    伦敦金融时报
    <img alt="" src="/images/upArraw.jpg">
    5905.07
    0.33
    S&amp;P 500
    <img alt="" src="/images/upArraw.jpg">
    1361.23
    0.23
    多伦多综合指数
    <img alt="" src="/images/downArraw.jpg">
    12458.30
    -0.22
    */
      

  8.   

    string s = File.ReadAllText(Server.MapPath("~/test.txt"));
    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(Server.HtmlDecode(s));
    HtmlNodeCollection trs = htmlDoc.DocumentNode.SelectNodes(@"//span[@id='XmlIndex1']/table/tr");
    for (int i = 0; i < trs.Count; i++)
    {
    HtmlNodeCollection tds = trs[i].SelectNodes(@"td");
    for (int j = 0; j < tds.Count; j++)
    {
    if (i > 0 && j == 1)
    Response.Write(trs[i].SelectSingleNode("//img").Attributes["src"].Value + " ");
    else
    Response.Write(tds[j].InnerText + " ");
    }
    Response.Write("<br/>");
    指数   LAST %CHG 
    美国道琼斯工业指数 /images/upArraw.jpg 12949.87 0.35 
    纳斯达克指数 /images/upArraw.jpg 2951.78 -0.27 
    日本日经指数 /images/upArraw.jpg 9485.09 1.08 
    香港恒生指数 /images/upArraw.jpg 21566.42 0.35 
    上证指数 /images/upArraw.jpg 2370.23 0.55 
    深证综指 /images/upArraw.jpg 9654.27 0.41 
    澳洲综合指数 /images/upArraw.jpg 4332.80 1.39 
    NZSE50 /images/upArraw.jpg 3315.57 0.81 
    伦敦金融时报 /images/upArraw.jpg 5905.07 0.33 
    S&P 500 /images/upArraw.jpg 1361.23 0.23 
    多伦多综合指数 /images/upArraw.jpg 12458.30 -0.22