<div.+?c-container[^>]+?>(.*)</div>

解决方案 »

  1.   

    人家要是某天有个程序员改了一个网页的一个地方,写个 
         <div name="abc" class="result-op c-container xpath-log"
    你又怎么办呢?正则就是瞎匹配,根本不懂 html 语法。进行 html 分析根本不是用正则表达式。
      

  2.   

    是的,很多时候,很多人一看到文本处理,就拍脑袋正则,而不是去想有没有别的更 extensible 的方式去做这件事情。
    比如你完全可以用 linq to xml
      

  3.   


                string s = @"<div class=""result-op c-container xpath-log""></div>
    <div class=""result-op c-container""></div>
    <div class=""result c-container ""></div>";
                MatchCollection matches = Regex.Matches(s, @"(<div\sclass=.*?c-container[^>]*?></div>)");
                foreach (Match m in matches)
                {
                    Console.WriteLine(m.Groups[1].Value);
                }
      

  4.   

    zzx112358的不如我的精简,其他几位的表达式没有结果
      

  5.   

    是的,很多时候,很多人一看到文本处理,就拍脑袋正则,而不是去想有没有别的更 extensible 的方式去做这件事情。
    比如你完全可以用 linq to xml
    我想过不用正则,但不知用什么,谢谢提醒
      

  6.   

    可以使用开源类库HtmlAgilityPack
    介绍: HTML Agility Pack:簡單好用的快速 HTML Parser
    把下面的代码里面的html替换成你的html源码就可以 public static void Extract()
    {
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    HtmlNode root = doc.DocumentNode;
    //移除所有script节点
    foreach(HtmlNode script in root.Descendants("script"))
    script.Remove();
    //移除所有style节点
    foreach(HtmlNode style in root.Descendants("style"))
    style.Remove();
    //移除所有comment节点
    foreach(HtmlNode comment in root.Descendants("//comment()"))
    comment.Remove();

    HtmlNodeCollection nodes = root.SelectNodes("/div[contains(@class, 'c-container')]");
    if (null != nodes) {
    for (int i = 0; i < nodes.Count; ++i) {
    Console.WriteLine(string.Format("class: {0}", nodes[i].GetAttributeValue("class", "")));
    }
    }
    }
      

  7.   

    问题没说清楚,div的类名有三种,我能取出每种各1、2个,但是不能取出全部符合的div
      

  8.   

    你所有的 DIV 都能全部取出来,还有什么不能做的?Everything is under control 了~~~
    可以用 LINQ 扩展方法筛选加抽选,就可以了,大致代码如下(没有运行过,提供思路):public static IEnumerable<HtmlNode> GetDistinctSampleNodes(string url)
    {
        // save4me 的代码......
        HtmlNodeCollection nodes = hdoc.DocumentNode.SelectNodes("/div[contains(@class, 'c-container')]");    if (nodes != null)
        {
            var classNames = nodes.Select(node => node.Attributes["class"].Value).Distinct();
            foreach (var className in classNames)
            {
                yield return nodes.Where(node => node.Attributes["class"].Value == className).First();
            }
        }
    }