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

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

  1. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Код:
    re:>[\s\t\r\n]*<|>{br2}<
     
    sinoda нравится это.
  2. sinoda

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

    Регистрация:
    10 фев 2012
    Сообщения:
    55
    Город:
    Москва
    Благодарю Вас Уважаемый Кagorec !!!
    Спасибо Сергею за программу !!!
     
    Root нравится это.
  3. Maxxx

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

    Регистрация:
    30 май 2020
    Сообщения:
    113
    Здравствуйте, товарищи. Подскажите, что-то не могу сообразить ,как составить регулярное выражение, чтобы оно в поиске/замене в блоке кода брало только одну фразу-формулу.

    <p>Methyl (2R)-(2-chlorophenyl)[(2S)-(2-chlorophenyl)[6,7-dihydrothieno[3,2-c]pyridin-5(4H)-yl]acetyloxy]acetate ;</p>

    <p>CAS # 1421283-60-4 ;</p>

    <p>C24H21Cl2NO4S ;</p>

    <p>Exact Mass: 489.0568 ;</p>

    <p>MW: 490.40 ;</p>


    Взять по правилу такому, что строка начинается с <p>C(две цифры)(и тут сколько-то символов до пробела, их разное кол-во на разных страницах) .
    И еще перед формулой не всегда стоит тег <p>, бывает и просто перенос строки. Вот так:
    <p>CAS # 855661-74-4 (base) ;</p>

    C21H25ClFN3O4 ;
    <p>Mol. Wt.: 437.89 ;</p>


    Эта строка всегда в разных местах, так что по пропуску тегов <p> не получится, поэтому думаю только регулярками. Но вот синтаксис никак не подберу..
     
    Последнее редактирование: 9 апр 2021
  4. xLime

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

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Доброго времени.

    Наверное что-то вроде этого:
    Код:
    re:([<p>]*C\d{2}.*?\s;[</p>]*)|@@@$1@@@
    @@@{get}@@@|{get}
    screen-regexp-post-54644.jpg
     
    kagorec и Maxxx нравится это.
  5. Maxxx

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

    Регистрация:
    30 май 2020
    Сообщения:
    113
    Да, оно, спасибо огромное!
     
  6. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Код:
    re:[^A-Za-z\d]{1}C([\d]{2}[^\s\t\r\n\;\:\,\.\<]+)|~@C$1@~
    ~@{get}@~|{get}
     
    xLime и Maxxx нравится это.
  7. Maxxx

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

    Регистрация:
    30 май 2020
    Сообщения:
    113
    Это шедевр!) Скажите, может есть какой-то сервис, который выстраивает рег выражение автоматом? (не regexr.com) . В этом невозможно разобраться))
     
  8. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Для парсинга хватает обычно базовых знаний (регулярных выражений).
     
    Maxxx нравится это.
  9. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Это всегда так для всех. Приходит с годами и опытом. Жаль что не всегда оценивается по достоинству(
     
    kagorec и Maxxx нравится это.
  10. Constantine

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

    Регистрация:
    8 ноя 2018
    Сообщения:
    25
    Добрый день. Подскажите, пожалуйста, регулярное выражение, которым можно оставить только те строки, в которых количество символов менее 11?
     

    Вложения:

  11. xLime

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

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Здравствуйте.
    По правилам хорошего тона следует текст на изображениях дублировать текстом.

    Попробуйте следующие правила:
    Код:
    re:\w{12,}|
    re:(\r\n)+|{br}
    
     
    Root нравится это.
  12. Constantine

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

    Регистрация:
    8 ноя 2018
    Сообщения:
    25
    Принял, прошу прощения.

    Сработало, спасибо большое!
     
    Root нравится это.
  13. Grushe

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

    Регистрация:
    10 апр 2014
    Сообщения:
    45
    Добрый день!
    Подскажите, как удалить с помощью регулярки в конце строки тег <br>?
    Как удалить в начале у меня получается re:(^\<br\>)|
    А вот как в конце не получается.
     
  14. Root

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

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

    Код:
    [LINEMODE]<br>{textend}|
     
  15. Neutrion

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

    Регистрация:
    13 ноя 2020
    Сообщения:
    54
    Ребят извините если повторяю, говорю честно искал по форуму ответ, но ненашел!

    Мне нужно с каждого ряда оставлять последние 5 цифр. Как это реализовать?

    Пример:
    4001181531511
    32899086396
    1005002485102059

    Должно получится:
    31511
    86396
    02059
     
  16. xLime

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

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Добрый день.

    Спасибо за подробное описание. Попробуйте следующие правила:
    Код:
    re:(\d{5}$)|@@@$1@@@[LINEMODE]
    @@@{get}@@@|{multiget}
    2021-05-10 00-37-35.png
     
    Root нравится это.
  17. ITz

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

    Регистрация:
    31 янв 2020
    Сообщения:
    43
    Город:
    Third Rome
    кто сталкивался с подобным подскажите!

    как регуляркой можно убрать двойные кавычки внутри двойных кавычек в значении элемента т.к. с ключами обычно все в порядке (это псевдо json), т.е. как бы привести код к правильному виду
    к примеру имеем следующую строку:
    Код:
    "id": 222699245, "url_id": 1043293567, "name": "English dictonary "for Beginners" power edition" , "link": "www.pageupload.com"
    а на выходе нужно получить
    Код:
    "id": 222699245, "url_id": 1043293567, "name": "English dictonary for Beginners power edition" , "link": "www.pageupload.com"
    и т.п. если где-то ещё попадется одинаковая двойная кавычка внутри двойных
     
    Последнее редактирование: 28 май 2021
  18. xLime

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

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Добрый день.

    Я бы решил это так:
    1) Убрать все кавычки
    2) Добавить кавычки по шаблону между символами ":" и ","

    Код:
    "|
    {get}|{get},
    re:(\w+):|"$1":
    re::[\s\t]*([a-zA-z\s\t\.]+)[\s\t]*,|:"$1",
    ,{textend}|
    regex-remove-quotes.png
     
    ITz и kadishev1997 нравится это.
  19. Root

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

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

    Вот, например, символы двойных кавычек в значениях экранируются так:
    Код:
    \"
    Как экранируются символы в JSON можете посмотреть здесь
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     
    ITz нравится это.
  20. ITz

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

    Регистрация:
    31 янв 2020
    Сообщения:
    43
    Город:
    Third Rome
    это просто супер! как раз то что нужно, напоследок а можно ли заодно обернуть в двойные ковычки цифровые значения, что-бы привести код к полноценному виду:

    Код:
    "id": "222699245", "url_id": "1043293567", "name": "English dictonary for Beginners power edition", "link": "www.pageupload.com"
    и сам себе отвечаю, на основе Вашей формулы
    Код:
    re::[\s\t]*([0-9a-zA-z\s\t\.]+)[\s\t]*,|:"$1",
    еще раз большое спасибо, решение супер!
     
    Slavikprof, xLime и Root нравится это.

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