例有这么一段文本:
<body>
  <table>
    <tr>
      <td>00</td>
    </tr>
    <tr>
      <td>
        <table>
          <tr><td>11</td></tr>
          <tr><td>22</td></tr>
        </table>
      </td>
    </tr>
    <tr><td>444</td>
    </tr>
  </table>
</body>
我只想取出以下内容:
         <table>
          <tr><td>11</td></tr>
          <tr><td>22</td></tr>
        </table>

解决方案 »

  1.   

    不需要用正则表达式呀
    用JS就很简单呀
    document.table[0].innerHTML
    不知道对不对^_^
      

  2.   

    tdhao,这在BS模式下是OK,但我是想用CS模式下,通过抓取指定网页上的信息,处理后入库。
      

  3.   

    老大,直接把那个串当XML来处理,很方便的,如果是比较规则的可以用XSLT,这个问题绝对不能用正则表达式,太复杂如:
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("串");XmlNodeList nodes = doc.SelectNodes("body/table/tr");
    XmlNodeList node = nodes[1].SelectNodes("tr/td/table");MessageBox.Show(node[0].InnerXml);大概是这样,其余的自己研究吧
      

  4.   

    就这么点要求,正则还是可以做得到的Match m = Regex.Match(str, @"<table[^>]*>(?:(?!<table[^>]*>)[\s\S])*?</table>", RegexOptions.IgnoreCase);
    if (m.Success)
        MessageBox.Show(m.Value);
      

  5.   

    就这么点要求,正则还是可以做得到的Match m = Regex.Match(str, @"<table[^>]*>(?:(?!<table[^>]*>)[\s\S])*?</table>", RegexOptions.IgnoreCase);
    if (m.Success)
        MessageBox.Show(m.Value);
      

  6.   

    回复superhood :直接把那个串当XML来处理,是可以,但是我是用来抓取别人的网面内容,获取的内容不一定是标准的XML,所以该用法不通。楼上两位大佬,我可以有点没说清,补充下:我的意思是,通过参考标识取其所以的表格,例:我把"22"设为参考的标识,就可取出其所在的表格,并不是说,一定是表包含一表的结构。
      

  7.   

    把问题重复说详细点,请高手帮忙。。过客大哥在吗?
    例有这么一段文本: 
    <body> 
        <table> 
            <tr> 
                <td> 00 </td> 
            </tr> 
            <tr> 
                <td> 
                    <table> 
                        <tr> <td> 11 </td> </tr> 
                        <tr> <td> 22 </td> </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> <td> 444 </td> 
            </tr> 
        </table> 
    </body> 
    我只想取出以下内容: 
    我的意思是,通过参考标识取其所以的表格,例:我把"22"设为参考的标识,就可取出其所在的表格,并不是说,一定是表包含另一表的结构。
                      <table> 
                        <tr> <td> 11 </td> </tr> 
                        <tr> <td> 22 </td> </tr> 
                    </table> 
      

  8.   

    把问题重复说详细点,请高手帮忙。。过客大哥在吗? 
    例有这么一段文本:   
    <body>   
            <table>   
                    <tr>   
                            <td>   00   </td>   
                    </tr>   
                    <tr>   
                            <td>   
                                    <table>   
                                            <tr>   <td>   11   </td>   </tr>   
                                            <tr>   <td>   22   </td>   </tr>   
                                    </table>   
                            </td>   
                    </tr>   
                    <tr>   <td>   444   </td>   
                    </tr>   
            </table>   
    </body>   
    我只想取出以下内容:   
    我的意思是,通过参考标识取其所以的表格,例:我把"22"设为参考的标识,就可取出其所在的表格,并不是说,一定是表包含另一表的结构。 
                                        <table>   
                                            <tr>   <td>   11   </td>   </tr>   
                                            <tr>   <td>   22   </td>   </tr>   
                                    </table>   
      

  9.   

    过客已经收山了,既然你这么锲而不舍,那我就写下吧这几天没回这个问题,一是你开始没把问题描述清楚,二是这个问题太复杂了,以目前.NET版的正则问题难度来看,这个问题开200分帖也不为过,不回它倒不是因为分的问题,只是研究它太占用时间了如果仅仅是以“22”这样的做为参考标识,用我上面写的稍稍改造就可以了,问题的复杂在于,如果以“00”或者“444”做为参考标识,就要考虑到<table>标签嵌套的问题,既要保证取包含参考标识的最内层<table>,又要保证<table>和</table>配对匹配string strFlag = textBox1.Text;
    Match m = Regex.Match(yourStr, @"<table[^>]*>(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[\s\S])*)(?(o)(?!)))\b" + strFlag + @"\b(?:(?!<table[^>]*>)[\s\S])*?(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[\s\S])*)(?(o)(?!)))</table>", RegexOptions.IgnoreCase);
    if (m.Success)
        MessageBox.Show(m.Value);
    输入的参考标识中如果有正则中有特殊意义的字符,需要对其进行预处理,另外需要在程序中进行异常处理,这个自己处理下吧如果源字符串中同时多处出现输入的参考标识,这里取第一个出现的参考标识所在的<table>
      

  10.   

    嘻,多谢root_ 你真是牛人,呵呵,这贴子分上少了,在这特向你多说两声,,谢谢,谢谢,,