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パーサーを使用したくない場合は、正規表現を次々に使用するか、これを2つのパターンの間に追加してください。適切に機能しなかったため、スター.*正規表現を少し変更しました。

最初に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 に答える