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

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

  1. Abricos

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

    Регистрация:
    12 июл 2017
    Сообщения:
    7
    Город:
    Kyiv
    Восхитительно!
    Как все гениально и просто. Спасибо! Пойду учить регулярные выражения :)
     
    kagorec и Root нравится это.
  2. Stan

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

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

    Как исключить ссылки, которые не содержат слово full

    ссылки -каждая на новой строке

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

    Осталось бы
    Ссылки недоступны для гостей
    Ссылки недоступны для гостей
     
  3. Root

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

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

    Ссылки недоступны для гостей
     
    Stan и Kreol нравится это.
  4. Stan

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

    Регистрация:
    15 июн 2011
    Сообщения:
    499
    ок
     
    Последнее редактирование: 13 авг 2017
  5. Dron25

    Dron25 Well-Known Member Пользователи

    Регистрация:
    17 июн 2014
    Сообщения:
    263
    Здравствуйте
    есть сайт , где нужная информация в одинаковых тегах <div class="h">

    Код:
    <div class="h">www.samuylova.ru</div><div class="h">vk.com/zsamuylova</div><div class="h">vk.com/club_samuylova</div><div class="h">instagram.com/zsamuylova</div><div class="h">+79039365161</div>
    Код:
    <div class="h">www.agnik.ru</div><div class="h">fzr250r@mail.ru</div><div class="h">norco-diz</div><div class="h">+79231208590</div><div class="h">+79139456233</div>
    подскажите как сделать как эти информацию разместить в файле по правильным столбцам
    Ссылки недоступны для гостей

    с телефонами, имейлами еще понятно
    а инстаграм и фейсбук чтоб определяло и главное сайт

    помогите с регуляркой или другим решением
     
  6. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Можно попробовать маркировать по принципу вхождения:
    Код:
    "h">([^<>]+)(nstagram)([^<>]+)</|"h"insta>$1$2$3</
    "h">([^<>]+)(vk\.com)([^<>]+)</|"h"vk>$1$2$3</
     
    Dron25 нравится это.
  7. Dron25

    Dron25 Well-Known Member Пользователи

    Регистрация:
    17 июн 2014
    Сообщения:
    263
    спасибо, отличное решение

    а с простыми сайтами как быть?

    наверное делать так:
    чистим от <div class="h"insta> <div class="h"vk> <div class="h"email> <div class="h"tel> итд
    и из того что останется если например есть точка тогда это сайт

    или есть проще и лучше решение?
     
    Последнее редактирование: 18 авг 2017
  8. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    страниц 10 просмотрите чтоб выяснить примерно какой вид ссылки на сайт.
    потом под такой формат придумать можно маркировку.
     
    Dron25 нравится это.
  9. Stan

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

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

    простая штука, но чот застопорился, вроде раньше делал такое.
    код такой
    <s>11</s>
    <s>22</s>
    <s>33</s>
    <s>44</s>

    <A>1</A>
    <A>2</A>
    <A>3</A>
    <A>4</A>

    и результат нужен такой

    11#1
    22#2
    33#3
    44#4


    поиск заменой получается только
    1#1
    1#2
    1#3
    1#4
     
  10. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Ссылки недоступны для гостей
     
  11. Stan

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

    Регистрация:
    15 июн 2011
    Сообщения:
    499
    а в поиск замене нельзя такое сделать? т.к. этот код уже готовый
     
  12. Root

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

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

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

    Регистрация:
    15 май 2017
    Сообщения:
    13
    Здравствуйте.

    Спарсил страницу, получил:

    Много текста с точками и дефисами...
    <a href="Ссылки недоступны для гостей-1-2/subcategory_3_4/page-5-6">site</a>
    ... опять много текста с точками и дефисами.


    Возможно ли, используя регулярные выражения заменить определённые символы только в пределах тега <a>?
    То есть на выходе должно получиться:

    Много текста с точками и дефисами...
    <a href="Ссылки недоступны для гостей(точка)com/category(дефис)1(дефис)2/subcategory_3_4/page(дефис)5(дефис)6">site</a>
    ... опять много текста с точками и дефисами.
     
  14. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    К примеру такая простыня из одинаковых регулярок.
    Странно что одна замена не охватывает все.
    Код:
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    re:="([^<>"@#]*)([UIOAJEeuioaj]{1})|="$1@$2#
    После переводчика, просто примените замены
    @|
    #|
     
    kotr и Root нравится это.
  15. kotr

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

    Регистрация:
    15 май 2017
    Сообщения:
    13
    Спасибо за помощь! Если делать по такой схеме, то всё равно будут пробелы между символами и буквами и что-нибудь он всё-таки переведёт))
    Я сделал так:
    re:="([^<>"@#]*)([-]{1})|="$1defis
    На выходе получается вот такая штука: <a href="Ссылки недоступны для гостей">site</a>

    Да, надо делать много замен, но это работает. Аналогично можно поступить с / и _
    Ещё раз спасибо!
     
  16. Root

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

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

    Скачайте доработанную версию Ссылки недоступны для гостей и замените файл Content Downloader.exe в папке с программой.

    Далее применяйте следующее правило поиск-замены:
    Код:
    a{intag}a|A
    2017-09-06_17-10-22.png
     
    kagorec и kotr нравится это.
  17. kotr

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

    Регистрация:
    15 май 2017
    Сообщения:
    13
    Спасибо, всё работает!
    Это дополнение будет в следующих версиях или не стоит в ближайшем будущем обновлять программу?
     
  18. Root

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

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

    Будет. Просто обновите и все...
     
  19. xLime

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

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Пытаюсь разобраться с регулярными выражениями уже настроенного парсинга.
    Код:
    re:.ru/([^\/]+)/([^\/]+)/([^\/]+)/([^\/]*)/$
    re:.ru/([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)/([^\/]*)/$
    /tel:
    re:.ru/([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)/([^\/]*)/[a-Z]
    1. Сайт.ru / (любой текст 1 или более символов кроме \/) / (любой текст 1 или более символов кроме \/) / (любой текст 1 или более символов кроме \/) / (любой текст 0 (т.е. даже его отсутствие) или более символов кроме \/) / $
    Вопрос: я правильно понимаю логику написанного? Каково значение символа конца строки $? Каково значение всего этого регулярного выражения? Я ожидал от него отграничения глубины ссылок, но глубину ссылок он не ограничивает.

    2. Что значит /tel: ? В поиске я таких параметров не нашел.

    3. Тоже самое, что и п.1, но для чего указан диапазон [a-Z] без самого выражения (...)? Какой смысл имеет это выражение? Насколько я понял, диапазон задается только для группы выражения в скобках (...).
     
  20. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Из вышеперечисленного достаточно в Ctrl+3 вписать просто домен, выставить глубину ссылок и отметить галочку "сохранять ссылки с окончанием /"
    Вопросов будет еще больше если вам ответить на пункты 1, 2 и 3 - учите основы регулярных выражений Ссылки недоступны для гостей этого достаточно будет чтобы разбираться.

    п.с. регулярки перечисленные вами либо изменены либо неправильно составлены, точку экранировать обязательно, значение [a-Z] неправильно и надо было так [a-zA-Z]+
     
    xLime и Root нравится это.

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