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

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

  1. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Явно речь о формате CS-Cart, очень похож.
    Пробуйте через Ссылки недоступны для гостей, или более тонко настраивание через Ссылки недоступны для гостей.
    п.с. Регулярными выражениями тут не помочь.
     
  2. radostwi

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

    Регистрация:
    12 май 2015
    Сообщения:
    3
    Привет.. скажите пожалуйста, как регуляркой сделать так, чтобы первая буква после точки с пробелом, была большой ?
    И как сделать, что бы текст, который парситься, шел в одну строку ?
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    А то на выходе получаю так, что каждвя паршенная граница с новой строки начинается -
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    Заранее спасибо!
     
    Последнее редактирование модератором: 26 май 2015
  3. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Входящие данные предоставьте (часть кода/текста) чтобы по одному вопросу не растягивать простыню в виде постов вопрос-ответна на пару страниц.
    Покачто можно предложить чтото вроде, основываясь на кратком описании, универсальное решение:

    Регулярное выражение для повышения регистра первой буквы после точки (вопроса, восклицательного знака) с пробелом, в Content Downloader
    Код:
    re:([\.\?!]+)([\s\t]+)([\w]{1})|$1$2[REGUPALL]$3[/REGUPALL]
    Использовать в доплгительные настройки границ, в поиск-замена или в макросе FIRST_REPLACE
     
    Последнее редактирование: 26 май 2015
  4. radostwi

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

    Регистрация:
    12 май 2015
    Сообщения:
    3
    Что то не работает регулярка, вставлял через ферст реплайс, удаляет весь текст.

    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    Так же нужно решить проблему, что бы спаршенный контент каждой границы парсинга шел в одну строку внутри абзаца. Сейчас же просто текст разбивается на построчно, разрывая тем самым смысловые предложения.
     
    Последнее редактирование модератором: 26 май 2015
  5. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Код:
    re:[\s\t\r\n]+| {break}re:([\.\?!]+)([\s\t]+)([\a-zа-яА-ЯA-Z]{1})|$1$2[REGUPALL]$3[/REGUPALL]
    первая регулярка в одну строку делает исключая излишние пробелы и переходы строк
    вторая регулярка занимается регистром букв.
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     
  6. sergo-8ck

    sergo-8ck New Member Пользователи

    Регистрация:
    25 янв 2015
    Сообщения:
    38
    Город:
    Чебоксары
    Поиск слов, где встречаются и латинские буквы и русские.

    В этом примере заменены буквы "a" и "o" на русские.
    Как составить регулярное выражение которое просто находит такие слова.
    И как заменить эти русские буквы на латинские?
     
    Последнее редактирование: 11 июн 2015
  7. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Думаю, это не регулярка нужна, а новый макрос. Подумаю над реализацией (лиж бы востребованно было это). Спасибо!
     
  8. nikolas1612

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

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    Одним выражением вряд ли. Серией выражений - да.
    1. составляете список всех русских букв, имеющих дубль написания в англ. языке
    2. Если речь идет о сплошном английском тексте - просто делаете соответствующий список замен (как на строчные, так и на заглавные буквы) и прогоняете через него текст.
    3. Сложнее, если в тексте встречаются русские вставки, которые трогать нежелательно - тогда на каждую букву из п.1 пишете по несколько строк замены: а). любая англ. буква стоит ДО заменяемой русской б). то же самое, но ПОСЛЕ. Плюс отдельно для строчных вариантов и прописных. Типаж замен на букву А примерно такой:
    Код:
    re:(?-i)([A-Za-z])а|$1a
    re:(?-i)а([A-Za-z])|a$1
    re:(?-i)([A-Za-z])А|$1A
    re:(?-i)А([A-Za-z])|A$1
    Теоретически, так мы произведем замены только в английских словах.
    Громоздко, но должно сработать.
     
    Последнее редактирование: 12 июн 2015
  9. Root

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

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

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

    Регистрация:
    3 фев 2015
    Сообщения:
    5
    выделить всё кроме заданного слова

    Хочу с помощью регулярки в сканере сайтов CD решить задачу: не добавлять в очередь ссылок ссылки содержащие "/f/...", кроме "/f/page"
    По правилу регулярок должно сработать такое выражение
    Код:
    re:/f/(?!page).*
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    но в сканере эта регулярка не срабатывает, пропускает все "/f/...". Пришлось использовать пока неполноценную замену (до другого не додумался)
    Код:
    re:/f/[^p].*
    вот она работает в сканере, но понятно не полноценно, т.к. пропускает все "/f/p..."

    Как можно с помощью регулярки решить эту задачу или может штатными средствами это возможно?

    P.S. регулярку ставлю в поле "не добавлять в очередь ссылки, содержащие" в сканере сайтов
     
    Последнее редактирование: 29 июн 2015
  11. Root

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

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

    Добавлять в очередь только ссылки с /f/page <- это исключит попадание в результат ссылок типа /f/...
     
  12. novo

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

    Регистрация:
    3 фев 2015
    Сообщения:
    5
    Неправильно описал задачу ;( собираю разные ссылки, в том числе и с присутствием "/f/..." и т.к. этого вида ссылок большое кол-во, то их нужно убрать, но оставить только "/f/page" иначе пагинации не будет.

    P.S. а выражения типа (?!page) движок CD получается не поддерживает?
     
  13. Root

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

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

    Вот этот модуль выражений используется в программе, можете почитать:
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    Я в его детали, простите, не вникал. Все решается внутренними функциями программы без использования регулярных выражений.

    Вас опять не понимаю:
    Вы собираете ссылки с присутствием /f/..., но их нужно убрать <- простите, но это выходит за рамки моего понимания.

    Рекомендую привести пример списка ссылок и сказать, какие из них нужно оставить и какие отфильтровать. Я вам подскажу, какие фильтры использовать.

    С уважением к вам, Сергей.
     
  14. nikolas1612

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

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    (?!)(?<!)(?=)(?<=) конструкции условий не работают


    если ваш пример реально /f/page/ то вам автор программы все уже сказал и регулярки не нужны вообще
     
    Последнее редактирование: 29 июн 2015
  15. Min-Z-Drav

    Min-Z-Drav New Member Пользователи

    Регистрация:
    14 янв 2015
    Сообщения:
    32
    Подскажите, как сделать чтобы текст парсил до первой точки, или например начинал парсить от второй точки?
     
  16. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Вы когда спрашиваете помощь с регулярным выражением то прилагайте пример кода или ссылку на страницу.
     
  17. Min-Z-Drav

    Min-Z-Drav New Member Пользователи

    Регистрация:
    14 янв 2015
    Сообщения:
    32
    Прилагаю пример:

    Есть текст где присутствуют 4 точки:
    Текст текст. Текст 2 текст 2. Текст 3 текст 3. Текст 4 текст 4.

    Как сделать чтобы парсило до первой точки? Чтобы получилось вот так:
    Текст текст.

    И как сделать чтобы начало парсинга было от второй точки и спарсило так:
    Текст 3 текст 3.
     
  18. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Лучше используйте макрос IMORE или SHORT специальный для этого.

    Регулярное выражение, использовать в дополнительной настройке границы:
    Код:
    re:^([^\.]+)\.[s\t\r\n\]+|<metka>$1.</metka>
    Получится
    <metka>Текст текст.</metka> Текст 2 текст 2. Текст 3 текст 3. Текст 4 текст 4.
    Далее можно по своему обработать макросами заменой REPLACE
     
  19. Min-Z-Drav

    Min-Z-Drav New Member Пользователи

    Регистрация:
    14 янв 2015
    Сообщения:
    32
    Вставил в дополнительную настройку, но нечего не изменилось, метки не появились
     
  20. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Вместо </metka> поставьте @@@
     

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