如何写这个正则表达式

时间:2010-08-27 05:10:17

标签: regex

HTML:

<dt>
    <a href="#profile-experience" >Past</a>
</dt>
<dd>
    <ul class="past">
        <li>
            President, CEO &amp; Founder <span class="at">at</span> China Connection
        </li>
        <li>
            Professional Speaker and Trainer <span class="at">at</span> Edgemont Enterprises
        </li>
        <li>
            Nurse &amp; Clinic Manager <span class="at">at</span> <span>USAF</span>
        </li>
    </ul>
</dd>​​​​​

我希望匹配<li>节点。 我写了正则表达式:

<dt>.+?Past+?</dt>\s+?<dd>\s+?<ul class=""past"">\s+?(?:<li>\s*?([\W\w]+?)+?\s*?</li>)+\s+?</ul>

实际上它们不起作用。

6 个答案:

答案 0 :(得分:2)

不能使用正则表达式解析HTML,就像它只是一大堆文本一样。使用DOM解析器是一种正确的方法。

答案 1 :(得分:2)

Don't使用正则表达式解析HTML ...

答案 2 :(得分:1)

不要使用正则表达式来匹配html文档。最好使用简单的状态机将其解析为DOM树。

我假设您正在尝试获取HTML列表项。因为你没有指定你使用的语言,所以有一些伪代码可以帮助你:

伪码:

while (iterating through the text)

    if (<li> matched)

        find position to </li>
        put the substring between <li> to </li> to a variable

当然有很多第三方库可以做这种事情。根据您的开发环境,您可能已经有一个功能(例如javascript)。

答案 3 :(得分:1)

您使用哪种语言?

如果您使用Python,则应尝试使用lxml:http://lxml.de。使用lxml,您可以搜索标记为 ul 且类为“past”的节点。然后,您可以检索其子项 li ,并获取这些节点的文本。

答案 4 :(得分:0)

如果您尝试从HTML中提取或操作此HTML,则jQuery中的xPath,xsl或CSS选择器可能比正则表达式更容易且更易于维护。您的目标究竟是什么以及您在哪个框架中运作?

答案 5 :(得分:-1)

请学会使用jQuery来做这类事情