Как сделать Рег. Выражение с меняющими элементами?

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
Доброго времени суток.Мне нужна помощь в одном случае парсинга. Есть страница с товарами в виде сетки. Количество товаров - пытаюсь парсить (через конструктор регулярных выражений) по цене, которая изображена на товаре. Но самое интересноe, что если заходить несколько раз и смотреть другие товары на этой же таблице - парсить неудается, так как меняются элементы, от которых я отталкиваюсь. Есть ли возможность указать, в регулярном выражении, что допустим до текста который мы ищем, определенный элемент может меняться? Или например добавить в конструктор регулярных выражений - подобную строчку, которая позволит более гибко настраивать парс?
1 Вариант:
(?<=<!----><!----><dm-currency-icon\ _ngcontent-dmarket-c17=""\ class="ng-star-inserted"><span\ class="o-currencies--USD"></span></dm-currency-icon>).*?(?=</span></strong>)
2 Вариант:
(?<=<!----><!----><dm-currency-icon\ _ngcontent-dmarket-c20=""\ class="ng-star-inserted"><span\ class="o-currencies--USD"></span></dm-currency-icon>).*?(?=\ </span></strong><!----><!----><!---->)
3 Вариант:
(?<=!----><!----><dm-currency-icon\ _ngcontent-dmarket-c22=""\ class="ng-star-inserted"><span\ class="o-currencies--USD"></span></dm-currency-icon>).*?(?=\ </span></strong><!----><!----><!---->)



2 Вопрос.И если на странице есть 2ве сетки с товарами (слева и справа) - одна из них с моими купленными, а вторая именно та, которую мне надо парсить. Но элементы поиска по рег.выражению идентичны - если искать по вышеуказанным рег выражениям, находит как левую сторону с ценами товаров, так и правую. Как верно будет спарсить только правую страницу цен? (Код страницы идет по принцыпу - сверху html с левой стороны товаров, и только потом после всех моих цен, идут товары с правой страницы товаров, которые мне нужны.)
 
Последнее редактирование:

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 389
Благодарностей
5 447
Баллы
113
Есть ли возможность указать, в регулярном выражении, что допустим до текста который мы ищем, определенный элемент может меняться
Легко, просто ставь точки там где меняются значения.
Хотя в твоем случае можно поставить вместо чисел (17, 20, 22 и т.д.) такое значение
\d{1,3}
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
Можно пожалуйста на моем примере показать какой метод использовать и что означет каждый из методов? Есть ли вариант помочь и со вторым вопрос, который я задал?
Легко, просто ставь точки там где меняются значения.
Хотя в твоем случае можно поставить вместо чисел такое значение

\d{1,3}
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 389
Благодарностей
5 447
Баллы
113
C#:
(?<=!----><!----><dm-currency-icon\ _ngcontent-dmarket-c\d{1,3}=""\ class="ng-star-inserted"><span\ class="o-currencies--USD"></span></dm-currency-icon>).*?(?=\ </span></strong><!----><!----><!---->)
Как верно будет спарсить только правую страницу цен?
Надо код и примеры, либо ждать экстрасенсов.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
Вот код.
 

Вложения

  • 635,7 КБ Просмотры: 4
Последнее редактирование:

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 389
Благодарностей
5 447
Баллы
113
пришли 2-3 прмера, что нужно брать. А что не нужно.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
И по поводу html кода , если пролистнуть вниз, то что нужно искать я отделил его <!---------->Правое окно<!-------->
Искать нужно через рег выражение:
Код:
(?<=<!----><!----><dm-currency-icon\ _ngcontent-dmarket-c22=""\ class="ng-star-inserted"><span\ class="o-currencies--USD"></span></dm-currency-icon>).*?(?=</span></strong><!----><!----><!---->)
Цена, с которой не должен начаться поиск - 0.12
Цена, с которой должен начаться поиск - это 539.60

пришли 2-3 прмера, что нужно брать. А что не нужно.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
Подскажите, пожалуйста, а если изменяемый текст имеет символы, например как тут: 16:14 и может быть 18:40 и т.д. \d{1,3} - не подходит для этого.
Легко, просто ставь точки там где меняются значения.
Хотя в твоем случае можно поставить вместо чисел (17, 20, 22 и т.д.) такое значение
\d{1,3}
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 389
Благодарностей
5 447
Баллы
113
Подскажите, пожалуйста, а если изменяемый текст имеет символы, например как тут: 16:14 и может быть 18:40 и т.д. \d{1,3} - не подходит для этого.
Конечно нет. Сейчас не за компом. Примерно так
\d{1,2}:\d{1,2}

Не помню надо ли экранировать в конструкторе двоеточие. Как узнаете то замените точку в центре

UPD. Ниже подсказали, отредактировал.
 
Последнее редактирование:
  • Спасибо
Реакции: Gunjubasik

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 101
Благодарностей
8 977
Баллы
113
  • Спасибо
Реакции: Gunjubasik и Mikhail B.

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)