试图得到一个完整的

本文关键字:一个 | 更新日期: 2023-09-27 18:12:54

c#中的正则表达式。

我试图在c#中刮掉整个div元素…

我试过div class="txt-block"'s*(.+?)('r'n?|'n)'s*",但它不能把它刮干净。什么好主意吗?这是div..谢谢!

    <div class="txt-block" itemprop="creator" itemscope itemtype="http://schema.org/Person"> 
    <h4 class="inline">Writers:</h4>
    <a href="/name/nm1318843/?ref_=tt_ov_wr" itemprop='url'><span class="itemprop"    itemprop="name">Mark Fergus</span></a>               (screenplay), 
    <a href="/name/nm1319757/?ref_=tt_ov_wr" itemprop='url'><span class="itemprop"         
    itemprop="name">Hawk Ostby</span></a>               (screenplay), <a href="fullcredits?ref_=tt_ov_wr#writers" >6 more credits</a>&nbsp;&raquo;
</div> 

试图得到一个完整的

首先是单复数:

(?s)<div.*?>(.*?)</div>

需要一个特别命名的div?

(?s)<div[^>]*?class="txt-block"[^>]*?>(.*?)</div>

想要节省CPU并避免不必要的回溯?

<div[^>]*?class="txt-block"[^>]*?>(([^<]*(?(?!</div>)<))*)</div>

以上假设没有嵌套的DIV项。这就是不使用Regex的整个想法真正发挥作用的时候。除非你正在使用c#。net。在这种情况下,您只需这样做:

(?xm)
    (?>
        <(?<Tagname>div)[^>]*?class="txt-block"[^>]*>
)
(?(Tagname)
    (
        </(?(?!'k'Tagname')(?<-Tagname>))*'k'Tagname'>(?<-Tagname>)
    |
        (?>
            <(?<Tagname>[a-z][^'s>]*)[^>]*>
        )
    |
        [^<]+
    )+?
    (?(Tagname)(?!))
)

或者,单行版本:

(?m)(?><(?<Tagname>div)[^>]*?class="txt-block"[^>]*>)(?(Tagname)(</(?(?!'k'Tagname')(?<-Tagname>))*'k'Tagname'>(?<-Tagname>)|(?><(?<Tagname>[a-z][^'s>]*)[^>]*>)|[^<]+)+?(?(Tagname)(?!)))

我发布的最复杂的例子不能在Regex Buddy中工作,但可以在任何。net框架中工作。Regex Buddy不支持平衡组,这是一个。net风格。

用regex解析HTML不是一个好主意。试着在c#中找到一个解析HTML的库。

经过快速搜索,我找到了这个库:http://htmlagilitypack.codeplex.com/似乎这个库具有您需要的所有功能。

相关文章: