анализ строки таблицы HTML с помощью регулярного выражения

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, используя регулярное выражение?

  • 0
    обновил мой ответ новым сокращенным регулярным выражением, которое работает для предоставленного вами измененного ввода.
Теги:

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

РЕДАКТИРОВАТЬ:

Я сделал более короткое регулярное выражение:

REGEX:

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

Что используется на pythonregex.com с отредактированным вводом, который вы предоставили, дает:

ВЫВОД:

>>> regex.findall(string)
[(u'5 star', u'13'), (u'1 star', u'2')]
  • 0
    используя приведенное выше выражение, оно будет похоже на [('5 star', ''), ('', '13')], но я хочу что-то вроде [('5 star', '13')], '|' или выражение, создающее эту проблему. есть идеи по этому поводу?
  • 0
    @naveenyadav, что странно, так как я использую предоставленные вами шаблоны, просто добавляю ИЛИ между ними, чтобы шаблон поймал либо ** 5 звезд **, и / или 13 . Работают ли эти шаблоны для вас, когда вы используете их отдельно?
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню