Regexp - шпаргалка по регулярным выражениям

Тема в разделе "Решение различных задач по парсингу", создана пользователем kagorec, 19 мар 2012.

  1. v_int

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

    Регистрация:
    24 июн 2017
    Сообщения:
    10
    Город:
    Салават
    Здравствуйте! Помогите справиться с удалением строк с дублем по значению 10, 11, 12, 13
    HTML:
    <span findprop="lqE1Pmuu-10" class="tableprice" cartid="2903" cen="580">580 руб.</span>
    <span findprop="ggxBJDDz-10" class="tableprice" cartid="2904" cen="580">580 руб.</span>
    <span findprop="lqE1Pmuu-11" class="tableprice" cartid="2905" cen="580">580 руб.</span>
    <span findprop="ggxBJDDz-11" class="tableprice" cartid="2906" cen="580">580 руб.</span>
    <span findprop="lqE1Pmuu-12" class="tableprice" cartid="2907" cen="580">580 руб.</span>
    <span findprop="ggxBJDDz-12" class="tableprice" cartid="2908" cen="580">580 руб.</span>
    <span findprop="lqE1Pmuu-13" class="tableprice" cartid="2909" cen="580">580 руб.</span>
    <span findprop="ggxBJDDz-13" class="tableprice" cartid="2910" cen="580">580 руб.</span>
    
     
  2. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Добрый день.
    ctrl+shift+f
    ggxBJDDz
     
  3. v_int

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

    Регистрация:
    24 июн 2017
    Сообщения:
    10
    Город:
    Салават
    Спасибо! Виноват, не уточнил, что эти значения "lqE1Pmuu-10" меняются на страницах
     
  4. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Если это для повторяющихся границ, я бы сделал как-то так:
    Код:
    [IF1]
    [REPLACE(-{get}"|{get})][GRAN1][/REPLACE][TEXTEQUAL][REPLACE(-{get}"|{get})][VAR:NAME][/REPLACE][ELSE]
    [GRAN1]
    [/IF1]
    [VAR]
    [SET:NAME][GRAN1][/SET]
    [/VAR]
    
    Первый цикл:
    1. Сравнение значения №1 Границы 1 с переменной, которую еще не задали. Значения не будут совпадать, значить в результат попадет эта самая граница.
    2. Задаем переменную = значение №1 Границы 1.
    Второй цикл:
    1. Сравнение значения №2 Границы 1 с переменной со значением №1.
    2. Задаем переменную = значение №2 Граница 1.
    Третий цикл:
    1. Сравнение значения №3 Границы 1 с переменной со значением №2.
    2. Задаем переменную = значение №3 Границы 1.
    
    Обратить внимание на Ссылки недоступны для гостей макросов. Шаблон на практике не проверял.
     
    Последнее редактирование: 18 окт 2017
  5. v_int

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

    Регистрация:
    24 июн 2017
    Сообщения:
    10
    Город:
    Салават
    Не получается. Эти строки основного шаблона вывода [VALUE] , этот код есть в простой границе парсинга
    Код:
    <div class="row detail-item">
        <div class="col-md-4 col-sm-4 col-xs-12">
            <div class="detphoto">
                <img class="inline zoom" data-large="/upload/iblock/dba/dba1bd76169c5a783d8ce8658a45f04b.jpg" src="/upload/resize_cache/iblock/dba/300_400_1/dba1bd76169c5a783d8ce8658a45f04b.jpg" />
            </div>
            <div class="dophot">
                                <a href="#" class="showdop inlinet" data-large="/upload/iblock/e7e/e7e97e8ca553a1a2bf43e713af51ab70.jpg" attr-src="/upload/resize_cache/iblock/e7e/300_400_1/e7e97e8ca553a1a2bf43e713af51ab70.jpg">
                        <img class="img100" src="/upload/resize_cache/iblock/e7e/100_200_1/e7e97e8ca553a1a2bf43e713af51ab70.jpg" />
                    </a>
                        </div>
        </div>
        <div class="col-md-8 col-sm-8 col-xs-12">
            <div class="setparprice">
                <span class="setpar inlinem">Выберите параметры</span>
                <div class="inlinem">
                                    <span class="inlinem old-detail-price">от <b>650</b> р</span>
                                <span class="inlinem detail-price">от <b>580</b> р</span>
                </div>
            </div>
            <div class="paramtable">
                <table>
                    <thead>
                        <tr>
                            <td>Цвет</td>
                            <td>Размер</td>
                            <td>Кол-во</td>
                            <td>Стоимость</td>
                            <td>x</td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="hiddentr">
                            <td class="colorcheck">
                                <div class="dropper">
                                    <span class="drop-content"><span propid="hLbRlrMS"><img src="/upload/uf/9ac/9acb03581caef27ff162db8f1669f5e3.jpg" width="14" height="14" /></span></span>
                                    <ul class="drop-menu">
                                                                                    <li><span propid="hLbRlrMS"><img src="/upload/uf/9ac/9acb03581caef27ff162db8f1669f5e3.jpg" width="14" height="14" /></span></li>
                                                                                        <li><span propid="Buen1kXg"><img src="/upload/uf/326/326d4dfdc020ca1ff43b727cca6e3cc2.jpg" width="14" height="14" /></span></li>
                                                                                        <li><span propid="RnC9yQBU"><img src="/upload/uf/ec0/ec0bf89eca060878b0c799a4d8e4935d.jpg" width="14" height="14" /></span></li>
                                                                                        <li><span propid="ukXf2I9v"><img src="/upload/uf/ca0/ca09dd3bb87db17ec35bd26265430b0e.png" width="14" height="14" /></span></li>
                                                                            </ul>
                                </div>
                            </td>
                            <td class="sizecheck">
                                <div class="dropper">
                                    <span class="drop-content"><span propid="10">28</span></span>
                                    <ul class="drop-menu">
                                                                                    <li><span propid="10">28</span></li>
                                                                                        <li><span propid="11">30</span></li>
                                                                                        <li><span propid="12">32</span></li>
                                                                                        <li><span propid="13">34</span></li>
                                                                                        <li><span propid="14">36</span></li>
                                                                                        <li><span propid="15">38</span></li>
                                                                                        <li><span propid="16">40</span></li>
                                                                            </ul>
                                </div>
                            </td>
                            <td>
                                <input type="text" name="COUNT" class="howdrop" value="1" />
                            </td>
                            <td>
                                                                    <span findprop="hLbRlrMS-10" class="tableprice" cartid="543" cen="580">580 руб.</span>
                                                                        <span findprop="Buen1kXg-10" class="tableprice" cartid="544" cen="580">580 руб.</span>
                                                                        <span findprop="RnC9yQBU-10" class="tableprice" cartid="545" cen="580">580 руб.</span>
                                                                        <span findprop="ukXf2I9v-10" class="tableprice" cartid="546" cen="580">580 руб.</span>
                                                                        <span findprop="hLbRlrMS-11" class="tableprice" cartid="547" cen="580">580 руб.</span>
                                                                        <span findprop="Buen1kXg-11" class="tableprice" cartid="548" cen="580">580 руб.</span>
                                                                        <span findprop="RnC9yQBU-11" class="tableprice" cartid="549" cen="580">580 руб.</span>
                                                                        <span findprop="ukXf2I9v-11" class="tableprice" cartid="550" cen="580">580 руб.</span>
                                                                        <span findprop="hLbRlrMS-12" class="tableprice" cartid="551" cen="580">580 руб.</span>
                                                                        <span findprop="Buen1kXg-12" class="tableprice" cartid="552" cen="580">580 руб.</span>
                                                                        <span findprop="RnC9yQBU-12" class="tableprice" cartid="553" cen="580">580 руб.</span>
                                                                        <span findprop="ukXf2I9v-12" class="tableprice" cartid="554" cen="580">580 руб.</span>
                                                                        <span findprop="hLbRlrMS-13" class="tableprice" cartid="555" cen="580">580 руб.</span>
                                                                        <span findprop="Buen1kXg-13" class="tableprice" cartid="556" cen="580">580 руб.</span>
                                                                        <span findprop="RnC9yQBU-13" class="tableprice" cartid="557" cen="580">580 руб.</span>
                                                                        <span findprop="ukXf2I9v-13" class="tableprice" cartid="558" cen="580">580 руб.</span>
                                                                        <span findprop="hLbRlrMS-14" class="tableprice" cartid="559" cen="620">620 руб.</span>
                                                                        <span findprop="Buen1kXg-14" class="tableprice" cartid="560" cen="620">620 руб.</span>
                                                                        <span findprop="RnC9yQBU-14" class="tableprice" cartid="561" cen="620">620 руб.</span>
                                                                        <span findprop="ukXf2I9v-14" class="tableprice" cartid="562" cen="620">620 руб.</span>
                                                                        <span findprop="hLbRlrMS-15" class="tableprice" cartid="563" cen="620">620 руб.</span>
                                                                        <span findprop="Buen1kXg-15" class="tableprice" cartid="564" cen="620">620 руб.</span>
                                                                        <span findprop="RnC9yQBU-15" class="tableprice" cartid="565" cen="620">620 руб.</span>
                                                                        <span findprop="ukXf2I9v-15" class="tableprice" cartid="566" cen="620">620 руб.</span>
                                                                        <span findprop="hLbRlrMS-16" class="tableprice" cartid="567" cen="750">750 руб.</span>
                                                                        <span findprop="Buen1kXg-16" class="tableprice" cartid="568" cen="750">750 руб.</span>
                                                                        <span findprop="RnC9yQBU-16" class="tableprice" cartid="569" cen="750">750 руб.</span>
                                                                        <span findprop="ukXf2I9v-16" class="tableprice" cartid="570" cen="750">750 руб.</span>
                                                                
    возможно ли сюда прикрутить регулярку?
     
  6. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Как вы себе это представляете? Для того, чтобы отсеять повторы, необходимо сравнить элемент с уже имеющимся.
    Если Повторяющиеся границы по каким-то причинам использовать нельзя, то попробуйте Ссылки недоступны для гостей - он отфильтрует лишние и вернет необходимый список.
     
  7. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Собрать цены можно через повторяющиеся границы, полученное очистить от дублей макросом DELDUPE
     
  8. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Замените файл Content Downloader.exe (в папке с программой):
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    2017-10-20_10-00-21.png

    Код:
    [DUPIGNORE][RESETDATA][DELETEKEY][KEY][FIRST_REPLACE(findprop="{skip}-{get}"|{get})][VALUE][/FIRST_REPLACE][/KEY][VALUE][/DUPIGNORE]
     
  9. v_int

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

    Регистрация:
    24 июн 2017
    Сообщения:
    10
    Город:
    Салават
    Спасибо маэстро!
     
  10. mkoff

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

    Регистрация:
    19 фев 2017
    Сообщения:
    11
    Уже несколько дней бьюсь. Может кто уже знает как быть?

    Чужой список характеристик товара:
    10 - благородный розовый (PD033029A1)
    20 - насыщенный розовый (PD033069A1) (-1670 р.)

    Мне нужно сложить их в одну ячейку csv чтоб было так:
    Обработчик:наименование:модификатор цены|Обработчик:наименование:модификатор цены

    Варианты:10 - благородный розовый (PD033029A1):0|Варианты:20 - насыщенный розовый (PD033069A1):-1670

    И еще надо в характеристику без модификатора цены в конце добавить:0 дабы Kerner (импорт моего магазина) понимал, что цена для этой характеристики не меняется.

    Сложность в том, что "магазин-донор" (OpenCart) не выделяет тегами модификатор цены характеристики и я думаю его можно взять из скобки, только если там цифры. На многих страницах нет характеристик вообще. Где то нет только модификатора. А где-то в характеристики автор добавил (артикул) или (подсказки).

    Код:
    <div id="product">
    <hr>
    <!--Опции-->
    <h3>Доступные варианты</h3>
    <!--Сисок-->
    <!--Радиогруппа-->
    <!--Флажок-->
    <!--Картинка-->
    <div class="form-group required">
    <label class="control-label">Цвета помады Reorom Styler Anti-wrinkle Lipstick</label><br>
    <div id="input-option140">
    <div class="radio">
    <label>
    <input class="thumb" src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-3-1-450x450.jpg" src-colorbox="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-3-1-500x500.jpg" type="radio" name="option[140]" src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-3-1-450x450.jpg" src-colorbox="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-3-1-500x500.jpg" value="758" />
    <img src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-3-1-50x50.jpg" alt="10 - благородный розовый (PD033029A1)" class="img-thumbnail" /> 10 - благородный розовый (PD033029A1)                                      </label>
    </div>
    <div class="radio">
    <label>
    <input class="thumb" src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-4-1-450x450.jpg" src-colorbox="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-4-1-500x500.jpg" type="radio" name="option[140]" src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-4-1-450x450.jpg" src-colorbox="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-4-1-500x500.jpg" value="760" />
    <img src="http://site.ru/image/cache/catalog/Reorom/reorom-lipstick-4-1-50x50.jpg" alt="20 - насыщенный розовый (PD033069A1) -1670 р." class="img-thumbnail" /> 20 - насыщенный розовый (PD033069A1)                                        (-1670 р.)
    </label>
    </div>
    </div>
    </div>
     
    Последнее редактирование: 28 окт 2017
  11. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Нашел источник, а также в нем просмотрел варианты у других товаров
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 9 постов.**
    Товаров не так много чтоб для каждого делать регулярные выражения.
    Парсить через повт.границу и чистить от лишнего как вариант. например от цены
    re:\([^\)\(]{1,20}р\.\)|
     
    Последнее редактирование: 28 окт 2017
  12. mkoff

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

    Регистрация:
    19 фев 2017
    Сообщения:
    11
    Это для каждой возможной модификации цены свою строчку прописать?
     
    Последнее редактирование: 28 окт 2017
  13. Stan

    Stan Active Member Пользователи

    Регистрация:
    15 июн 2011
    Сообщения:
    499
    как удалить пустые строки?

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

    не все удаляются.
     
  14. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Тогда сделать можно иначе, пустые ячейки пометить метками (в определенной колонке)
    В редакторе CSV файлов нажмите ctrl+f укажите колонку, вставьте в замену
    Код:
    re:^[.]{0}$|DELETE123
    Далее удалить строки документа содержащие DELETE123
     
    xLime и Root нравится это.
  15. Stan

    Stan Active Member Пользователи

    Регистрация:
    15 июн 2011
    Сообщения:
    499
    Здравствуйте.

    Нужно удалить пробел только в одном месте в строке, чтобы не затронуло другие пробелы
    такие строки
    текст текст |1|1000|1|+|3 777|+|0|+|0.00000000

    удалить пробел в месте |3 777| , там может быть и |23 777| или |123 777|
     
    Последнее редактирование: 16 дек 2017
  16. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Добрый день.
    Код:
    re:(\d+)(\s+)(\d+)|$1$3
    [​IMG]
     
    Stan и Root нравится это.
  17. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    <toprice> примените при поиск/замене
     
  18. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    для границы которая выводит цену можно еще применить регулярное выражение:
    Код:
    re:[^0-9]+|
     
  19. patlat

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

    Регистрация:
    20 дек 2017
    Сообщения:
    1
    Приветствую всех.
    Чтот не пойму, как регулярки здесь работают.
    Прописываю в настройках фильтра вот эту простенькую регулярку

    re:Ссылки недоступны для гостей

    С надеждой на то, что я получу все ссыли до следующего слеша, то есть к примеру:
    Ссылки недоступны для гостей
    Ссылки недоступны для гостей
    Ссылки недоступны для гостей
    ......
    а в результате, я получаю всё подряд
    Ссылки недоступны для гостей
    Ссылки недоступны для гостей
    ну и т.д.

    Прошу пояснить, почему так.
     
  20. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Регулярки никогда не использую и в них не разбираюсь.

    Вот материал по регулярным выражениям, изучайте Ссылки недоступны для гостей
     

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