本帖最后由 beckfun 于 2011-12-01 14:25:56 编辑

解决方案 »

  1.   

    如果要匹配的是class为vv22Txt1的div 
     (?is)(?<=<div class="vv22Txt1">).*?(?=</div>)
      

  2.   

    我自己总结的规则,根据class类来取!
    第一个取vvAll1——>vv11
    第二个取vvAll2——>vv21——>vv21Table和vvAll2——>vv22——>vv22Txt1,里面的再根据第二个正则来处理!
    第三个取vv22Txt4四楼的方法我写过!就是要写三个,但是我把这三个拼成一个就不行!!!
      

  3.   

    那个前面的 vv11,vv21 之类的是固定的吗? 如果是固定的也好办真的没有规则的话,位置固定也行。
      

  4.   

    (?is)(?<=<div class="(vv11|vv21Table|vv22Txt1|vv22Txt4)">).*?(?=</div>)你这个div有嵌套,而且嵌套顺序混乱,没法精确匹配div外层div的class
      

  5.   

    (?is)(?<=<(?:div|span)[^>]*?class="(?:vv11|vv22Txt1|vv22Txt4|vv21B|vv21D)">).*?(?=</?(?:div|span)[^>]*?>)
      

  6.   

    像vv12,与它邻近的前一个div是vv11,是它的父节点
    而vv22Txt2,与它临近的前一个div是vv22Txt1,是它的兄弟节点这种嵌套顺序太乱了
      

  7.   

    有规则有好办,楼上的可以,也可以硬写
    比如(?s)<div class="vv11">(?<one>.*?)<div.*?<span class="vv21B">(?<two>.*?)</span>.*?<span class="vv21D">(?<three>.*?)</span>.*?class="vv22Txt4">(?<four>.*?)</div>取group["one"]...的值
      

  8.   

    可以用HtmlAgilityPack的HtmlDocument类获取节点:
    我把楼主源文本中要获取的文本后面加上“值X”以示区别: HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.Load(Server.MapPath("~/test.txt"));
    HtmlNodeCollection nodes = htmlDoc.DocumentNode.SelectNodes(@"//*[@class='vv11' or @class='vv21B' or @class='vv21D' or @class='vv22Txt1' or @class='vv22Txt4']");
    foreach (HtmlNode node in nodes)
    {
    Response.Write(node.ChildNodes[0].InnerText + "<br/>");
    }
    结果:
    **********值一
    *******值二
    ******* 值三
    *********************************值四
    ************************************值五 
      

  9.   

    其实就是用一个XPath表达式,按照class属性把要取的节点找出来,然后获取第一个子节点(文本节点)。
    HtmlAgilityPack是第三方免费类库,下载地址:http://htmlagilitypack.codeplex.com/
    项目中bin文件夹下加入dll和xml就行了,using HtmlAgilityPack;
      

  10.   

    (?is)(?<=<(?:div|span)[^>]*?class="(?:vv11|vv22Txt1|vv22Txt4|vv21B|vv21D)">).*?(?=</?(?:div|span)[^>]*?>)
    nb
      

  11.   

    XPath表达式://*[@class='vv11' or @class='vv21B' or @class='vv21D' or @class='vv22Txt1' or @class='vv22Txt4']
    的意思是选取文档中所有class值为vv11、vv21B、vv21D、vv22Txt1、vv22Txt4的节点。
      

  12.   

    如果从字符串加载,可以用htmlDoc.LoadHtml("");