<table id="3001">
</table>匹配table标签
条件一 : 标签是Table并且id以300开头的id=3001
id=3002
id=3003
一直到30010总共10个
符合条件的id抓去下来
<table id="3001">
  <table>
  
</table>不管table 里面有什么东西不管,只要<table></table>结束就行。
table

解决方案 »

  1.   

    (?is)<table\b[^>]*?id="300([1-9]|10)"[^>]*?>.*?</table>
      

  2.   

    3001-30010
    <table\s*?id="(300[1-9])"3001-3010
    <table\s*?id="(30[01][1-9])"
      

  3.   

    错了,应该是0-9
    3001-30010
    <table\s*?id="(300[0-9]|30010)"3001-3010
    <table\s*?id="(300[0-9]|3010)"
      

  4.   

     string pattern = @"(?is)(?<=<table[^>]*?id=[""'])300([1-9]|10)(?=[""'][^>]*>.*?</table>)";
      

  5.   

    匹配table里面的html代码的话,用.*?确实很牵强吧? 我一般后台每拼一个TR就给个br
      

  6.   

    <table\s*?id="(300[0-9]|3010)">[\w\W]*?</table>
      

  7.   


    感谢大师的回复但是有个问题,如果table 标签里嵌套了还有符合条件的table 标签这种写法不妥吧是错误的比如:string pagedata = @"<table id='123'><table id='3001'></table><table id='3002'><table id='3003'><br/><table id='300123'></table></table></table>"; 这段字符。。
      

  8.   


    感谢大师的回复但是有个问题,如果table 标签里嵌套了还有符合条件的table 标签这种写法不妥吧是错误的比如:string pagedata = @"<table id='123'><table id='3001'></table><table id='3002'><table id='3003'><br/><table id='300123'></table></table></table>"; 这段字符。。
      

  9.   


    (?isx)<table[^>]*id="300([1-9]|10)">(?><table[^>]*>(?<Open>)|</table>(?<-Open>)|(?:(?!</?table\b).)*)*</table>
    //最好还是用 平衡组 防止在嵌套的情况下获取的不正确。
      

  10.   

    string str = @"<table id='123'><table id='3001'></table><table id='3002'><table id='3003'><br/><table id='300123'></table></table></table>";
                string pattern = @"(?is)((?<g><table[^>]*?id=[""'](?<id>300([1-9]|10))[""'][^>]*>)|(?<-g></table>)|.)*(?(g)(?!))";
                var list = Regex.Match(str, pattern).Groups["id"].Captures.OfType<Capture>().Select(t => t.Value).ToList();