[FILTERSTRINGS], регулярные выражения или удалить последние 2 строки в конце текста

Тема в разделе "Функции поиск-замены и регулярные выражения", создана пользователем TIIIMOXAN, 11 фев 2023.

  1. TIIIMOXAN

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

    Регистрация:
    12 авг 2011
    Сообщения:
    29
    Добрый день!

    Помогите, пожалуйста, разобраться со следующим вопросом.

    При парсинге в конце основного текста иногда добавляются несколько строк с динамическим текстом внутри, вида:

    <p>text <strong>text</strong> of a <strong>text</strong>, text=33.</p>
    <h3>text text text text text text?</h3><p>text text text "<strong>text text</strong>"text text text text text text<strong>text</strong>." text text text text text text text text text text text text. text text text text text text.</p>
    <h3>text text text?</h3><p>text text text <strong>text</strong> text text text text text text text text text<strong>text</strong> <strong>text text text</strong>. text text text text text text text text text. text text text text text text.</p>
    <h3>text text text</h3><p>text text text text text text text text text</p>
    <p>text text text</p>
    <p>text text text</p>
    <p>text text text</p>
    <p>Динамический текст<strong>который</strong>необходимо удалить:</p>
    <p><a href="Ссылки недоступны для гостей" class="url_class">domain.com/adress/123456789</a></p>

    <p>keys</p>

    1. Для удаления строки <p>keys</p> я использую конструкцию:

    [FILTERSTRINGS]keys|delete

    2. Трудности начинаются с 2 оставшимися строками:

    <p>Динамический текст<strong>который</strong>необходимо удалить:</p>
    <p>
    <a href="Ссылки недоступны для гостей" class="url_class">domain.com/adress/123456789</a></p>

    Если использую конструкцию:

    [FILTERSTRINGS]domain|delete

    тогда остается строка:

    <p>Динамический текст<strong>который</strong>необходимо удалить:</p>

    3. Для [FILTERSTRINGS] можно использовать Ссылки недоступны для гостей, но я так и не понял, как их можно применить к моему случаю. Т.е. мне нужно дополнительно вырезать строку сверху.

    4. Также, я пробовал использовать регулярное выражение:

    re:<p.*?>\s<p.*?<a href\=\"https\:\/\/[a-z]+\.[a-z]+\/[a-z]+\/[0-9]+\".*p>|

    и оно прекрасно работает при анализе в сервисе Ссылки недоступны для гостей, но никак ни в CD:

    upload_2023-2-11_18-15-12.png


     
  2. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.435
    Адрес:
    Latvia
    Приведите пример (можно в лс) оригинального куска статьи с тегами
     
  3. TIIIMOXAN

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

    Регистрация:
    12 авг 2011
    Сообщения:
    29
    Привел пример текста в ЛС.
     
  4. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.435
    Адрес:
    Latvia
    Код:
    ...
    Регулярка удалена)
    Решение рабочее ниже в следующем моем сообщении
    Первая регулярка цепляет класс ссылки, вторая на основе двоеточия и двух слов отсекает хвост
     
    Последнее редактирование: 12 фев 2023
    TIIIMOXAN нравится это.
  5. TIIIMOXAN

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

    Регистрация:
    12 авг 2011
    Сообщения:
    29

    Тут основная проблема в том, что вторая регулярка сработает только на основе указанных слов и двоеточия. В строке над ссылкой могут выводится любые данные, как с двоеточием, так и без, а также без указанных слов.

    К тому же, вторая регулярка может зацепить и основной текст, если в нем будут перечисленные вхождения.

    Поэтому я ищу вариант, который при наличии определенного вхождения в строку (в данном случае это домен) дополнительно вырежет строку, которая стоит выше.

    Наподобие [FILTERSTRINGS], но нужно каким-то образом заставить его смотреть наверх и захватывать верхнюю строку.

    Мне кажется, такую функцию можно добавить в [FILTERSTRINGS], чтобы была возможность смотреть наверх и вниз и вырезать строки. Что скажете Root?
     
  6. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.435
    Адрес:
    Latvia
    Через {sep} перечислите элементы присутствующие в последней\предпоследней строке
    Код:
    re:\n[^\n]*(earn more about{sep}/question/{sep}from:</p>{sep}class="sg\-text sg\-text\-\-link).{0,300}$|
     
    TIIIMOXAN нравится это.
  7. TIIIMOXAN

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

    Регистрация:
    12 авг 2011
    Сообщения:
    29
    а как поступить, если слов таких не будет?

    Т.е., если бы я мог знать весь перечень вхождений, то ваша конструкция подходит идеально и можно было бы использовать даже [FILTERSTRINGS]. Но в строке <p>Динамический текст<strong>который</strong>необходимо удалить:</p> текст и вхождения постоянно разный.

    По сути, нужна конструкция поиск-замены, которая вырежет дополнительно строку сверху, если в тексте будет указан определенный домен.
     
    Последнее редактирование: 13 фев 2023
  8. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.435
    Адрес:
    Latvia
    Вам никто не запрещает добавить любой элемент вхождения в том числе и "определенный домен"
     
  9. TIIIMOXAN

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

    Регистрация:
    12 авг 2011
    Сообщения:
    29
    Да, домен я вырежу без проблем, так как он по сути статический и не меняется в пределах одного сайта.

    Но у меня проблема в том, что текстовые данные (вхождения в регулярке) непостоянные и в одном случаем сработает регулярка, так как в ней будут перечислены признаки, а в другой нет, так как всех признаков (вхождений) я не могу знать.

    Например, вариант 1:

    <p>Динамический текст<strong>который</strong>необходимо удалить:</p>
    <p><a href="Ссылки недоступны для гостей" class="url_class">domain.com/adress/123456789</a></p>


    Вариант 2:

    <p>Какой-то произвольный текст из головы</p>
    <p><a href="Ссылки недоступны для гостей" class="url_class">domain.com/adress/123456789</a></p>

    Вариант 3:

    <p>Как же решить этот вопрос?</p>
    <p><a href="Ссылки недоступны для гостей" class="url_class">domain.com/adress/123456789</a></p>



    И таких вариаций может быть масса.

    Неужели только зная все текстовые вхождения (из строки, что стоит выше со строкой домена) можно решить данный вопрос? Или я не так понимаю вас?
     
    Последнее редактирование: 13 фев 2023
  10. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.435
    Адрес:
    Latvia
    Если извенстно о статичном расположении элементов (в данном случае ссылка с одним доменом и строкой выше тег p) тогда мжно удалить окончание регулярным выражением и skip.
    Код:
    re:\n[^\n]*(domain\.com{sep}/question/{sep}class="sg\-text sg\-text\-\-link).{0,300}$|
    <p{skip}|
     
    TIIIMOXAN нравится это.

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