Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 15:33   #11
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Цитата:
Сообщение от NIKOLAYY2 Посмотреть сообщение
При помощи регулярки- такой парс пишется 2 минуты, абсолютно без проблем.
В посте #6 уже привели пример, но у меня не получается переделать ее чтобы она так же парсила и:

Цитата:
<span class="live">
10:40
</span>
Текст 1
<img src="img.gif" class="class-serve" />
Продолжение Текст 1
<a href="/link5" class="live">
Текст 2
</a>
Текст 3
<br />
Нужно чтобы получилось:

10:40 Текст 1 Продолжение Текст 1

Последний раз редактировалось nibufep; 10.02.2015 в 15:36.
nibufep вне форума Ответить с цитированием
Старый 10.02.2015, 16:15   #12
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Ты в шаблоне немного ошибся, тебе надо так: (.*?)

Код:
var
  r: TRegExpr;
begin
  r := TRegExpr.Create;
  r.Expression := '<span>(.*?)</span>(.*?)<a href="/link" class="fin">(.*?)</a>';
  if r.Exec(Memo1.text) then
  begin
    repeat
      ListBox1.Items.Add(r.Match[1] + ', ' + r.Match[2]+ ', ' + r.Match[3]);
    until not r.ExecNext;
  end;
end;
Изображения
Тип файла: jpg 2222.jpg (38.8 Кб, 90 просмотров)
NIKOLAYY2 вне форума Ответить с цитированием
Старый 10.02.2015, 17:01   #13
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

А какая разница? Если работает одинаково.
nibufep вне форума Ответить с цитированием
Старый 10.02.2015, 17:19   #14
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
А какая разница? Если работает одинаково.
Было правильно. Вместо ="/link" было .+?
Иначе парсится только первая строка.
Iron Monk вне форума Ответить с цитированием
Старый 10.02.2015, 17:19   #15
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Код:
А какая разница? Если работает одинаково.
Что еще? Что там у тебя неработает опять?

Это не простые, это детские примеры парсинга, я тебе на картинке показал- парсит то что ты просил.
Ты уже и сам запутался?

Если парсить нужно другое, так измени шаблон и парсь другое.

Последний раз редактировалось NIKOLAYY2; 10.02.2015 в 17:23.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 10.02.2015, 18:19   #16
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Мне не другое нужно парсить, я уже написал что у меня не получается сделать в #11
nibufep вне форума Ответить с цитированием
Старый 10.02.2015, 18:27   #17
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Я частично сделал что нужжно:

Цитата:
Expression := 'span(.*?)>(.+?)</span>(.+?)<a href.+?class="fin">(.+?)</';
только мусор: "<img src="img.gif" class="class-serve" />"
Попадает в результат не понимаю как доделать эту регулярку
nibufep вне форума Ответить с цитированием
Старый 10.02.2015, 18:50   #18
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Попадает в результат не понимаю как доделать эту регулярку
смотрю в книгу ничего не вижу.

перед вами практически все есть, никаких мыслей?
lomastr_ вне форума Ответить с цитированием
Старый 10.02.2015, 19:29   #19
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Держи:

Код:
var
  r: TRegExpr;
begin
  r := TRegExpr.Create;
  r.Expression :=
    '<span class="live">(.*?)</span>(.*?)<img src=.*?/>(.*?)<a href=.*?>(.*?)</a>(.*?)<br />';
  if r.Exec(Memo1.text) then
  begin
    repeat
      ListBox1.Items.Add(r.Match[1] + ', ' + r.Match[2] + ', ' + r.Match[3]+ ', ' + r.Match[4]+ ', ' + r.Match[5]);
    until not r.ExecNext;
  end;
end;
И еще те совет такой- ты пойми что это регулярка она четко будет следовать твоему шаблону и все меняющиеся части ты должен ей указать в шаблоне!

Ты изучи страницу с которой ты будеш парсить, там же ты увидиш четко с какими настройками тебе шаблон задать!
Иначе она у тебя работать не будет.

Я вижу твой текст, я создал на него тебе шаблон, обрабатывающий его идеально.
Или что- то не так снова?

Здесь вся таблица регулярки в одной картинке, изучи ее: http://www.exlab.net/files/tools/she...exp/regexp.png
Изображения
Тип файла: jpg 3333.jpg (34.4 Кб, 74 просмотров)

Последний раз редактировалось NIKOLAYY2; 10.02.2015 в 19:35.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 10.02.2015, 20:53   #20
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

NIKOLAYY2,
Он сейчас парсит только по одному шаблону, а мне нужно сразу по трем.
Вот смотрите:

Есть таблица, в ней выводятся данные вот так:

1:
Код:
<span>10:00</span>Текст текст тест<a href="/link" class="fin">Еще текст</a>
2:
Код:
<span class="live">10:30</span><img src="/res/image/blank.gif" class="tennis-serve" />Текст текст тест<a href="/link2" class="live">
3:
Код:
<span>10:40<span class="status">Убран</span></span>Текст текст тест<a href="/link3" class="fin">
В 1 нужно получить и вывести в ListBox следующие:

10:00 Текст текст тест

В 2 нужно получить и вывести:

10:30 Текст текст тест

В 3 нужно получить и вывести:

10:40 Убран Текст текст тест

Нужно сделать это все через одну регулярку.
nibufep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
распарсить сторку bulldog5293 Общие вопросы Delphi 9 18.02.2011 23:57
Распарсить строку bulldog5293 Работа с сетью в Delphi 7 18.12.2010 19:25
Распарсить прайс Sanyo Microsoft Office Excel 7 13.11.2009 17:01
Помогите распарсить строку Alexander1991 Помощь студентам 1 08.03.2009 22:33
Распарсить HTML Табурет Общие вопросы C/C++ 11 02.03.2008 19:26