如有下面html文本片断
<table width="100%" cellspacing="1" cellpadding="1" border="0" bgcolor="#ffffff">
<tbody>
<tr id="showItem1"  bgcolor="#f5f5f5" >
    <td width="7%">产品1</td>
    <td>产品2</td>
    <td>产品3</td>
    <td>产品4</td>
  
</tr>
<tr id="showItem2" bgcolor="#f5f5f5"> 
<td> <del>3380.0</del></td>
<td><del>2930.0</del></td>
<td><del>2250.0</del></td>
<td><del>1530.0</del></td>
</tr>
</tbody>
</table>
我需要提取得里面的文本数据如下 
 产品1,产品2,产品3,产品4
3380.0,2930.0,2930.0,1530.0
c#中没有像js中哪种id取对象方式,我发现对数据取起来十分麻烦,请问有什么操作起来简单取字符数据的方法的

解决方案 »

  1.   

    应该没有你说的:像js中哪种id取对象方式
    就是用正则分析字符串了.
      

  2.   

    string str = @"<table width=""100%"" cellspacing=""1"" cellpadding=""1"" border=""0"" bgcolor=""#ffffff""> 
    <tbody> 
    <tr id=""showItem1""  bgcolor=""#f5f5f5"" > 
        <td width=""7%"">产品1 </td> 
        <td>产品2 </td> 
        <td>产品3 </td> 
        <td>产品4 </td> 
      
    </tr> 
    <tr id=""showItem2"" bgcolor=""#f5f5f5""> 
    <td> <del>3380.0 </del> </td> 
    <td> <del>2930.0 </del> </td> 
    <td> <del>2250.0 </del> </td> 
    <td> <del>1530.0 </del> </td> 
    </tr> 
    </tbody> 
    </table> 
    ";
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<td[^>]*?>\s*(<\w+>)*([\s\S]*?)(</\w+>)*\s*</td>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                System.Text.RegularExpressions.MatchCollection mc = reg.Matches(str);
                foreach (System.Text.RegularExpressions.Match m in mc)
                {
                    Response.Write(  m.Result("$2") + "<BR>");
                }
      

  3.   


    this.TextBox2.Text = Regex.Replace(this.TextBox1.Text, @"<(?>[^>]*)>", string.Empty, RegexOptions.IgnoreCase);
      

  4.   

    谢谢你的代码十分不错,可能是我描述太明白,这里需要注意一下就是我需要按id="showItem1"来取数据即一个ID取一组数据,这就是我在上面为什么将数据分为2排来显示。
    按td来这样取数据不太现实
    第1 一个table会有很多td但这样数据并非我需要,这样会加大数据提取量
    第2 因为我需要对取数据按一定机制来进行再组合,所以我就必须知道这组数据是从哪里出来的不然就没法组合。
      

  5.   


                string str = @"<table width=""100%"" cellspacing=""1"" cellpadding=""1"" border=""0"" bgcolor=""#ffffff""> 
    <tbody> 
    <tr id=""showItem1""  bgcolor=""#f5f5f5"" > 
        <td width=""7%"">产品1 </td> 
        <td>产品2 </td> 
        <td>产品3 </td> 
        <td>产品4 </td> 
      
    </tr> 
    <tr id=""showItem2"" bgcolor=""#f5f5f5""> 
    <td> <del>3380.0 </del> </td> 
    <td> <del>2930.0 </del> </td> 
    <td> <del>2250.0 </del> </td> 
    <td> <del>1530.0 </del> </td> 
    </tr> 
    </tbody> 
    </table> 
    ";
                str = System.Text.RegularExpressions.Regex.Replace(str, "<(?!(/?table)|(/?tr)|(/?td))[^>]*?>", "");
                str = System.Text.RegularExpressions.Regex.Replace(str, @"(<\w+)[^>]*?>", "$1>");
                System.Xml.XmlDocument dom = new System.Xml.XmlDocument();
                dom.LoadXml(str);
                System.Xml.XmlNodeList nl = dom.SelectNodes("//tr");
                foreach (System.Xml.XmlNode node in nl)
                {
                    Response.Write(node.ChildNodes[0].InnerText + "|"+node.ChildNodes[1].InnerText+"<BR>");
                }
      

  6.   

    谢谢很不错,还想问一下,能让<tr id=""showItem2""  保留吗,既然已经为xml我想如何属性保留可能更方便查询
      

  7.   

    我已经说了谢谢了,你还想怎么样,我更需要像cpp2017哪样回复。
      

  8.   

    可以str= System.Text.RegularExpressions.Regex.Replace(str,@"( <\w+)[^>]*?>","$1>");  这句去掉就可.
      

  9.   

    谢谢基本解决了,一会结贴我新开了一个贴到这里讲一下你的两个正则吗
    http://topic.csdn.net/u/20090803/15/26ad5e35-cede-4a79-a39c-17a412573d71.html