0

我已经阅读了这篇文章,为什么不对 HTML 使用正则表达式。作为交给我的任务的一部分,我别无选择,只能对 HTML 使用正则表达式。

我有 HTML 代码并单独尝试过

 <td class="a-nowrap">

          <span class="a-letter-space"></span><span>13</span>

        </td>

我已经能够使用以下正则表达式获得13 :

<td class="a-nowrap">\s*<span class="a-letter-space"></span><span>(\d*)</span>\s*</td>

同样来自

<td class="a-nowrap">

          <a class="a-link-normal" title="69% of reviews have 5 stars" href="">5 star</a><span class="a-letter-space"></span>          

        </td>

使用正则表达式获得 5

<td class="a-nowrap">\s*<a class="a-link-normal" [^>]*>\s*(.*)</a>\s*</td>

但是当两个 HTML 代码组合在一起时,

<table id="histogramTable" class="a-normal a-align-middle a-spacing-base">

  <tr class="a-histogram-row">



        <td class="a-nowrap">

          <a class="a-link-normal" title="69% of reviews have 5 stars" href="">5 star</a><span class="a-letter-space"></span>          

        </td>

        <td class="a-span10">

          <a class="a-link-normal" title="69% of reviews have 5 stars" href=""><div class="a-meter"><div class="a-meter-bar" style="width: 69.1358024691358%;"></div></div></a>

        </td>

        <td class="a-nowrap">

          <span class="a-letter-space"></span><span>13</span>

        </td>

  </tr>
  <td class="a-nowrap">

      <a class="a-link-normal" title="2% of reviews have 1 stars" href="">1 star</a><span class="a-letter-space"></span>          

    </td>

    <td class="a-span10">

      <a class="a-link-normal" title="2% of reviews have 1 stars" href=""><div class="a-meter"><div class="a-meter-bar" style="width: 2.46913580246914%;"></div></div></a>

    </td>

    <td class="a-nowrap">

      <span class="a-letter-space"></span><span>2</span>

    </td>


</table>

如何 使用正则表达式提取5 星和 13 ?

4

1 回答 1

1

如果您不想使用 HTML 解析器,请一个接一个地使用正则表达式,或者.*在两个模式之间添加它,我已经修改了一些您的星形正则表达式,因为它不能正常工作:

首先启用dotall标志,然后使用:

<td class="a-nowrap">\s*<a class="a-link-normal" [^>]*>\s*(\d star).*<td class="a-nowrap">\s*<span class="a-letter-space"></span><span>(\d*)</span>\s*</td>

输出:

第 1 组:5 星

第 2 组:13

编辑:

我做了更短的正则表达式:

正则表达式:

>(\d star)<.+?>(\d+?)<

pythonregex.com上使用您提供的编辑输入给出:

输出:

>>> regex.findall(string)
[(u'5 star', u'13'), (u'1 star', u'2')]
于 2013-11-08T12:11:21.813 回答