如:string str = @"<table id=""tableId"">                         <tr><td><span>2</span>期</td></tr>                         <tr><td ><span>第一期</span><span>第二期</span><span>第三期</span><span>第四期</span><span>第五期</span><span>第六期</span><span>第七期</span></td></tr>                         <tr><td><label>时间: 2012-09-16 21:30</label></td></tr></table>";我现在只会取到<td>里面的值,把<span>标签也给取出来了。这样实现的:Regex reg = new Regex(@"(?is)<table[^>]*?id=""tableId""[^>]*?>(?:\s*<tr>(?:\s*<td[^>]*?>(.*?)</td>){1}\s*</tr>)*\s*</table>");        foreach (Capture c in reg.Match(strHtml).Groups[1].Captures)        {            result += c.Value + "|";        }而我想得到<span>里面的值(取值的时候不带<span>标记,直接取里面的值),请问如何写正则表达式,谢谢!

解决方案 »

  1.   


                StreamReader reader = new StreamReader("c:\\1.txt",Encoding.Default);
                string source = reader.ReadToEnd();
                Regex reg = new Regex(@"(?is)(?<=<span>).*?(?=</span>)");
                MatchCollection mc = reg.Matches(source);
                foreach (Match m in mc)
                {
                    MessageBox.Show(m.Value);
                }
      

  2.   

    string strHtml = @"<table id=""tableId"">  <tr><td><span>2</span>期</td></tr>  <tr><td ><span>第一期</span><span>第二期</span><span>第三期</span><span>第四期</span><span>第五期</span><span>第六期</span><span>第七期</span></td></tr>  <tr><td><label>时间: 2012-09-16 21:30</label></td></tr></table>";            string result=string.Empty;
                            string pattern = @"(?i)(?<=<table[^>]*?id=['""]?tableId['""]?[^>]*?>(?:(?!</?table>)[\s\S])*?<span>)[^<>]+?(?=</span>)";            result = string.Join("|", Regex.Matches(strHtml,pattern).Cast<Match>().Select(a=>a.Value));
                //2|第一期|第二期|第三期|第四期|第五期|第六期|第七期
      

  3.   

    谢谢,请问3楼,里面还有个时间的<lable>标签内容如何取得啊,麻烦帮忙加到
    string pattern = @"(?i)(?<=<table[^>]*?id=['""]?tableId['""]?[^>]*?>(?:(?!</?table>)[\s\S])*?<span>)[^<>]+?(?=</span>)";这里面,谢谢啊。
      

  4.   

    Cast<Match>().Select(a => a.Value)这一句是什么意思啊?
      

  5.   

     string result = string.Empty;
                    string pattern = @"(?i)(?<=<table[^>]*?id=['""]?tableId['""]?[^>]*?>(?:(?!</?table>)[\s\S])*?<(span|label)>)[^<>]+?(?=</(span|label)>)";                result = string.Join("|", Regex.Matches(strHtml, pattern).Cast<Match>().Select(a => a.Value));
                    //2|第一期|第二期|第三期|第四期|第五期|第六期|第七期|时间: 2012-09-16 21:30
      

  6.   


    将匹配结果集转换为具体的Match集合,然后筛选出匹配结果中的Value,Lamda表达式中的a就是当前Match