大家好!
    最近在做html文件内容提取,遇到一个问题。
    如果对完整的html文件,其中有一个div是我要的
    <div class="info">
       ...
    </div>
    之前想了好久用正则式<div class="info">(.|\n)*?</div>,这样可以提取,但问题在于如果div对中嵌入多个<div>对,我就只能取到第一个</div>与其前面的内容,如果用<div class="info">(.|\n)*</div>则又会获得太长的匹配,不知道怎么样才能匹配到对称的子串?
    请大家帮帮忙,如果C#中有好一点的html解析库也希望大家告知一下,我找了好久没找到,最后才决定自己做解析的。
    谢谢!!

解决方案 »

  1.   

    得用平衡组了Regex re = new Regex("(?is)<div class=\"info\">[^<>]*(((?'TAG'<div[^>]*>)[^<>]*)+((?'-TAG'</div>)[^<>]*)+)*(?(TAG)(?!))</div>", RegexOptions.None);
    MatchCollection mc = re.Matches("text");
    foreach (Match ma in mc)
    {
    }
      

  2.   

        谢谢1楼帮助,但你的做法并不全对,因为你在用的排除式[^<>]*会除去所有含有其它非div标签的div对,所以得到的结果并不是我要的。
        不过你的回复给了我很大的启发,并且在你提示的基础上完成了,在此非常感谢!
        最后献上我最终用的正则式,希望对大家有所帮助~~
        不完善的地方还请大家指正~~
        
    <div class="info">((?!</?div[^>]*>).|\n)*(((?'TAG'<div[^>]*>)((?!</?div[^>]*>).|\n)*)+((?'-TAG'</div>)((?!</?div[^>]*>).|\n)*)+)*(?(TAG)(?!))</div>