Какая-то непонятка с регуляркой

Тема в разделе "Решение различных задач по парсингу", создана пользователем Kreol, 3 янв 2015.

  1. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Приветствую.
    Ребят какая-то непонятка с регулярным выражением.
    текст:
    Код:
    #60 мл§туалетная вода¥75 мл§туалетная вода¥120 мл§туалетная вода¥120 мл тестер§туалетная вода¥150 мл§туалетная вода¥150 мл тестер§туалетная вода¥(5 мл/20 мл лосьон д/тела)§набор¥(150 мл/75 мл гель д/душа/косметичка)§набор#
    пишу простую регулярку:
    Код:
    ^(#(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)¥(.*?)§(.*?)#)$
    замену на:
    Код:
    *Объём:$2:$4:$6:$8:$10:$12:$14:$16,*Вид:$3:$5:$7:$9:$11:$13:$15:$17
    И оно не работает.
    Таких вариаций много, вложеность до 35 парных штук (связка §(.*?)¥(.*?))
    в симуляторе все работает правильно.
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     
  2. Root

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

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

    Попробуйте поизменять модификаторы регулярных выражений в ctrl+8 -> вкладка RegExpr. Не уверен, что поможет, но все равно...

    С уважением к вам, Сергей...
     
  3. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Да нет Сереж, какая-то хрень с последовательностью.
    Если берем вот текст, который вмещает в себя 16 элементов
    Код:
    @111§_111№222§_222№333§_333№444§_444№555§_555№666§_666№777§_777№888§_888№@
    и пытаемся из нее получить регулярку типа
    Код:
    re:(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)|*Объём:$1:$3:$5:$7:$9:$11:$13:$15,*Вид:$2:$4:$6:$8:$10:$12:$14:$16
    то она не работает.
    НО если уменьшить на 1 позицию. то все работает.
    Код:
    re:(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)№(.*?)§(.*?)|*Объём:$1:$3:$5:$7:$9:$11:$13:$15,*Вид:$2:$4:$6:$8:$10:$12:$14:$16
    Проверь пожалуйста. А то теперь кроме как в екселе такую штуку не сделаешь.
     
  4. alamina.moon

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

    Регистрация:
    14 янв 2013
    Сообщения:
    214
    Возможно под каждый вариант написать свою регулярку? типа раз 15 вариантов - написать 15 вариантов регулярок.
    Вот для двух ошбъемов, попробуй в том же духе сделать для 16 объемов и 17

    re:^([^§]+)§([^¥]+)¥$|\*Объём\:$2
    re:^([^§]+)§([^¥]+)¥([^§]+)§([^¥]+)¥$|\*Объём\:$2\:$4
     
    Последнее редактирование: 5 янв 2015
  5. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Спасибо, так и сделал, не работают они правильно, после 7 совпадения просто перестает работать.
    Написал макрос в екселе.
     

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