Сложный (выборочный) парсинг

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
Подскажите, плиз...

На странице идет вот такой текст:

Абзац 1
Абзац 2
Абзац 3
Абзац 4
Строка Х
Абзац 5
Абзац 6


Мне нужно спарсить текст до Строки Х, т.е. только Абзацы 1-4.

Проблема осложняется тем, что на некоторых страницах может не быть Строки Х, в этом случае нужно спарсить все абзацы.

Иными словами, если есть Строка Х – нужно ее игнорировать, и игнорировать все, что идет за ней; а если Строки Х нет – то нужно парсить все.

В DOM'е у всех абзацев одинаковые теги, т.е. как-то идентифицировать ненужные абзацы вроде как невозможно. Строку Х идентифицировать можно, у нее есть уникальные опознавательные признаки.

Подскажите, как решить такую задачу?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Была подобная задача.

Просто регуляркой заменял на пустоту эти строки, и далее парсил что надо. Соотвественно если заменять нечего, то парсится будет все.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
ну как мне кажется можно проверить наличие строки x и если есть парсить по 1-му алгоритму, если нет по 2-му.
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
ну как мне кажется можно проверить наличие строки x и если есть парсить по 1-му алгоритму, если нет по 2-му.
Так алгоритм с наличием этой строки - это и есть основная проблема! Как парсить ДО строки, опуская строку и все что ниже?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
Ну Строку Х заменить не проблема, а как заменить на пустоту ТО, что идет ПОСЛЕ Строки Х?
Ну так есть конец у этого года. Что там не к чему зацепится? Сноси хоть все, если это не нужно. Делай регулярку текст начинается со строки X, разрешить переносы и заменяй.
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
Ну так есть конец у этого года. Что там не к чему зацепится? Сноси хоть все, если это не нужно. Делай регулярку текст начинается со строки X, разрешить переносы и заменяй.
Попробую, хотя по данному пути я уже пытался идти; не получилось.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 304
Благодарностей
5 421
Баллы
113
  • Спасибо
Реакции: Werti

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 367
Благодарностей
8 648
Баллы
113
если есть Строка Х – нужно ее игнорировать, и игнорировать все, что идет за ней; а если Строки Х нет – то нужно парсить все.
Попробуйте поэкспериментировать с такой регуляркой:
Регулярка:
([\w\W]*?(?=Строка\ Х))|([\w\W]*)
Если Строки Х не будет, то спарсит все, если будет, то спарсит до Строки Х. (0-ое совпадение)

60591

60592
 
  • Спасибо
Реакции: doc и Werti

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
Попробуйте поэкспериментировать с такой регуляркой:
Регулярка:
([\w\W]*?(?=Строка\ Х))|([\w\W]*)
Если Строки Х не будет, то спарсит все, если будет, то спарсит до Строки Х. (0-ое совпадение)

Посмотреть вложение 60591

Посмотреть вложение 60592
Спасибо, попробую.
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43
Кидай код поможем.
Только заключи его в код)
C#:
[CODE=csharp][ /CODE]
Ну я еще попробую регуляркой ([\w\W]*?(?=Строка\ Х))|([\w\W]*) , а если снова не получится - снова приду сюда, уже с кодом. :-)
 

Werti

Client
Регистрация
08.05.2019
Сообщения
441
Благодарностей
177
Баллы
43

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