Требуется помощь в парсинге повторяющихся границ

Тема в разделе "Решение проблем с использованием программы", создана пользователем yad2000, 27 фев 2013.

  1. yad2000

    yad2000 New Member Пользователи

    Регистрация:
    21 фев 2013
    Сообщения:
    9
    Имеем код полученный обычными границами парсинга:

    Код:
    <h6>SELECT SIZE (UK sizing)</h6>
       <a href="/how-can-we-help/size-guides" title="Size Guide" class="size-guide" style="display: none">Size Guide</a>  
    <table style="">
    <tr>
    <td>
    <label class="size-selection-label" for="SizeKey_0"><p>6</p></label>                            
    <input data-product-family-id="634057" data-stock-level="0" data-variant-id="4582724" 
    disabled="disabled" id="SizeKey_0" name="SizeKey" type="radio" value="16442" /> </td>
    <td>
    <label class="size-selection-label" for="SizeKey_1"><p>8</p></label>                          
    <input data-product-family-id="634057" data-stock-level="9" data-variant-id="4582725" id="SizeKey_1" name="SizeKey" type="radio" value="16443" />                </td>
    <td>
    <label class="size-selection-label" for="SizeKey_2"><p>10</p></label>                            
    <input data-product-family-id="634057" data-stock-level="9" data-variant-id="4582726" id="SizeKey_2" name="SizeKey" type="radio" value="16444" />                </td>
    <td>
    <label class="size-selection-label" for="SizeKey_3"><p>12</p></label>                            
    <input data-product-family-id="634057" data-stock-level="7" data-variant-id="4582727" id="SizeKey_3" name="SizeKey" type="radio" value="16445" />                </td>
    <td>
    <label class="size-selection-label" for="SizeKey_4"><p>14</p></label>                            
    <input data-product-family-id="634057" data-stock-level="4" data-variant-id="4582728" id="SizeKey_4" name="SizeKey" type="radio" value="16446" />                </td>
    <td>
    <label class="size-selection-label" for="SizeKey_5"><p>16</p></label>                            
    <input data-product-family-id="634057" data-stock-level="0" data-variant-id="4582729" 
    disabled="disabled" id="SizeKey_5" name="SizeKey" type="radio" value="16447" />                
    </td>
    <td>
    <label class="size-selection-label" for="SizeKey_6"><p>18</p></label>                            
    <input data-product-family-id="634057" data-stock-level="0" data-variant-id="4582730" 
    disabled="disabled" id="SizeKey_6" name="SizeKey" type="radio" value="16448" />                
    </td>
    <td></td>
    </tr>
    </table>
    Нужные значения которые нужно спарсить - помечены синим цветом, но те значения которые помечены disabled="disabled" нужно заблокировать. Т.е. в повторяющихся границах вместо списка:
    6,8,10,12,14,16,18 нужно получить список: 8,10,12,14

    Полный список получить здесь легко, задав начало <p> и конец </p>

    Как взять границу по <td>...</td>, затем заблокировать [value] содержащий disabled="disabled" и потом из него выдернуть <p>...</p> ???
     
  2. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    в файле 000000000000.txt - приведенный Вами код (на примере сабжа продемонстрировать не получается, т.к. форум перестраивает код "под себя").
    проект 0000000000txt.cdp - парсит этот файл получая на выходе то, что нужно.
    чтобы понять алгоритм, смотреть последовательно: поиск-замена для основного кода, шаблон повторяющейся границы №1, поиск-замена финального мусора (куча левых запятых) в шаблоне вывода.
    удачи.

    P.S. решение мудреное, вероятно есть варианты проще.
     

    Вложения:

  3. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    тоже думал над этим, это самый беспроблемный вариант. на практике пробовали? есть опасность нарезать так, что от кода останутся только рожки да ножки. слишком большой фрагмент для удаления. там, вроде, даже больше удалять надо, чем предлагает Kagorec. я не рискнул :) в итоге не удалял, а наоборот, вставлял.
     
    Последнее редактирование: 27 фев 2013
  4. alamina.moon

    alamina.moon Модератор Команда форума Модератор

    Регистрация:
    14 янв 2013
    Сообщения:
    214
    Вот такая регулярка вырежет все <td> из таблицы которые disabled :)
    HTML:
    <td>[^>]+><p>[0-9]+</p></label>[^>]+disabled[^>]+>[^>]+>
     
  5. yad2000

    yad2000 New Member Пользователи

    Регистрация:
    21 фев 2013
    Сообщения:
    9
    Спасибо за решение!!!

    Выполнил "Поиск замена для основного кода":
    Код:
    re:(<td>[^>]+><p>[0-9]+</p></label>[^>]+disabled[^>]+>[^>]+>)|
    и как следствие добился нужного результата

    только почему то не всегда срабатывает, буду экспериментировать с регулярками

    изменил регулярку на:
    Код:
    re:(<td>[^>]+><p>\w*?</p></label>[^>]+disabled[^>]+>[^>]+>)|
    потому что размеры оказывается не только цифровые но и буквенные бывают, и теперь проблема решена на 100%
     
    Последнее редактирование: 28 фев 2013

Поделиться этой страницей