Удаление опрелеленной строки при наличии в ней слова

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

  1. alex_n

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    Специалисты, подскажите, пожалуйста, как правильно указать конец строки в регулярном выражении, чтобы удалить полностью строку поиск-замена в границе парсинга?

    В границе включено (html to txt), удаление табов, переносов строк и пустых строк.

    Исходный текст:
    HTML:
    Ток сварки, А 250
    Диапазон сварочного тока, А 20-30
    Потр. мощность 60% кВА 3,5
    Охлаждение пассивное
    Расход воздуха, л / мин 170

    Требуется удалять только строки, начинающиеся с "охлаждение" и "Расход воздуха", последний символ строки может меняться от товара к товару, положение строки в списке также может меняться непредсказуемо

    {skip} не решает задачу полностью..
    HTML:
    Охлаждение{skip}{br}|
    Расход воздуха{skip}{br}|
    
    Работает, только если все удаляемые строки не являются последними, так как тега {br} в конце последней строки нет и получаем

    HTML:
    Ток сварки, А 250
    Диапазон сварочного тока, А 20-30
    Потр. мощность 60% кВА 3,5
    Расход воздуха, л / мин 170
    Пробовал так re:Охлаждение.*$| и так re:Охлаждение.*\n| не получил желаемого результата
     
  2. Root

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

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

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    Спасибо, но у меня этого макроса нет в редакторе шаблонов почему-то, может из-за лицензии Standart (v11.08)?

    Попробовал прописать его в шаблоне, не срабатывает.
    Вот шаблон ячейки:
    [IF2][CHARCOUNT][STRINGSFILTER][DELETE][KEYS]Охлаждение[/KEYS]<CD_GRAN_7!>[/STRINGSFILTER][/CHARCOUNT]>250[THEN]ПУСТО[ELSE][REPLACE({br}|, )][DEL_EMPTY_STRINGS][STRINGSFILTER][DELETE][KEYS]Охлаждение[/KEYS]<CD_GRAN_7!>[/STRINGSFILTER][/DEL_EMPTY_STRINGS][/REPLACE][/IF2]

    Пробовал IF1, IF2, может макрос не работает из-за того, что находится внутри другого?
    Но задача именно:
    1. Очистить исходный список от мусора, в том числе от лишних строк
    2. Посчитать кол-во символов уже очищенного текста, если >250, вывести ПУСТО, если меньше, удалить пустые и лишние строки([STRINGSFILTER]) и вывести список в строку, через запятую.
     
    Последнее редактирование: 17 авг 2014
  4. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Используйте регулярные выражения.
    Код:
    re:^Охлаждение(.*?)$|
    re:^Расход воздуха(.*?)$|
    Если это не сработает, не смешивайте дополнительные настройки и поиск/замену. Они не всегда адекватно работают между друг другом. Там последовательность надо учитывать.
    Поэтому лучше снять все галочки.
    и заменять все штатной поиск/заменой.
    1) удаляем те фрагменты, которые нам не нужны используя теги. Например <td>Охлаждение</td>|
    потом удаляем теги re:<(.*?)>|
    и так далее.
    re:<(.*?)>
     
    Последнее редактирование: 18 авг 2014
  5. Root

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

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

    Этого макроса нет ни у кого в редакторе шаблона вывода.

    Я ВАМ СКИНУЛ ГОТОВЫЙ КОД, ПРОСТО ВСТАВЬТЕ ЕГО В ШАБЛОН ВЫВОДА И ОН БУДЕТ РАБОТАТЬ!!!
     
  6. alex_n

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    Спасибо, но это уже пробовал, не катит
    Решил задачу добавлением {br} в конец текста и потом регулярным выражением, удаляющим текст до конца строки
    re:Охлаждение(.*?)\n|
     
  7. alex_n

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    Не срабатывает, указал выше шаблон, т.е. внутри нескольких тегов не работает, какой именно тег мешает, пока не определил.
    Работает лишь отдельно или внутри [DEL_EMPTY_STRIGS], вложения 2 и 3 уровня не тестировал.
     
  8. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.442
    Адрес:
    Latvia
    Вопрос в том чтобы "удалить строки из текста содержащие слова" )
    Значит приведенный выше вариант 100% подходит с применением макроса STRINGFILTER
    Если вам надо альтернативное решение чуствительное к регистру букв (большие/маленькие) то регулярным выражением:
    Код:
    re:([^\n]*)Охлаждение([^\n]*)|
    такое выражение затронит "Охлаждение" но НЕ поймет "охлаждение" с маленькой буквой
    П.С. можно ссылку на товар или настройку чтобы проверить на деле?
     
    Последнее редактирование: 18 авг 2014
  9. alex_n

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    Спасибо, задачу уже решил,выше описал как сделал, может кому будет полезно, повторяю подробно.

    В поиске-замене в границе в первую очередь ставлю
    re:\Z|{br} - добавляет перенос строки в конце всего текста
    И далее
    re:Охлажд(.*?)\n|
    re:расход возд(.*?)\n|

    получил что хотел, удаляет строки по нужному слову от начала (начало как раз "Охлаждение" или "Расход воздуха" до переноса строки.

    Пример.
    Структура кода:
    HTML:
    Строка A
    Строка B
    Строка C
    Строка D
    Строка E
    Строка F
    Поиск замена
    HTML:
    re:\Z|{br}
    re:Строка C(.*?)\n|
    re:Строка F(.*?)\n|
    Результат
    HTML:
    Строка A
    Строка B
    Строка D
    Строка E
    
    {br} в конце списка можно снести в шаблоне [DEL_EMPTY_STRINGS]
    или регуляркой re:\Z{br}| ставить надо в самом конце списка замен или после регулярок с ключевыми словами.
     
  10. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Такое форматирование нужно делать до того, как вы применяете HTMLTXT это будет куда более проще, чем то, что вы пытались сделать за столько часов.
     
  11. alex_n

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

    Регистрация:
    17 авг 2014
    Сообщения:
    7
    пробовал ДО, пробовал отключать HTMLTXT , но в списке столько много мусора (bold, стили текста - каждая строка своим стилем и т.п.), причем он непостоянен, что пришлось оставить HTMLTXT.
    В итоге задача решена.
     
    Последнее редактирование: 18 авг 2014

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