大家好!
最近在做html文件内容提取,遇到一个问题。
如果对完整的html文件,其中有一个div是我要的
<div class="info">
...
</div>
之前想了好久用正则式<div class="info">(.|\n)*?</div>,这样可以提取,但问题在于如果div对中嵌入多个<div>对,我就只能取到第一个</div>与其前面的内容,如果用<div class="info">(.|\n)*</div>则又会获得太长的匹配,不知道怎么样才能匹配到对称的子串?
请大家帮帮忙,如果C#中有好一点的html解析库也希望大家告知一下,我找了好久没找到,最后才决定自己做解析的。
谢谢!!
最近在做html文件内容提取,遇到一个问题。
如果对完整的html文件,其中有一个div是我要的
<div class="info">
...
</div>
之前想了好久用正则式<div class="info">(.|\n)*?</div>,这样可以提取,但问题在于如果div对中嵌入多个<div>对,我就只能取到第一个</div>与其前面的内容,如果用<div class="info">(.|\n)*</div>则又会获得太长的匹配,不知道怎么样才能匹配到对称的子串?
请大家帮帮忙,如果C#中有好一点的html解析库也希望大家告知一下,我找了好久没找到,最后才决定自己做解析的。
谢谢!!
MatchCollection mc = re.Matches("text");
foreach (Match ma in mc)
{
}
不过你的回复给了我很大的启发,并且在你提示的基础上完成了,在此非常感谢!
最后献上我最终用的正则式,希望对大家有所帮助~~
不完善的地方还请大家指正~~
<div class="info">((?!</?div[^>]*>).|\n)*(((?'TAG'<div[^>]*>)((?!</?div[^>]*>).|\n)*)+((?'-TAG'</div>)((?!</?div[^>]*>).|\n)*)+)*(?(TAG)(?!))</div>