Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

TRegExp и парсинг HTML   Найти похожие ветки 

 
NIIL   (2009-07-03 12:10) [0]

Всем доброго дня. Есть необходимость пропарсить кусок HTML. Загружать через TWebBrowser и далее ковырять DOM нет возможности. Исп. стандартные стредства типа Pos то же не улыбвает.
Нашел замечательный класс TRegExp, к сожалению найти инф. о регулярных выр. для него не могу. Нужно из куска html сначала вытащить текст между <Table> </Table>, далее <Tr> </Tr> и т.п. Подскажие выражение для поиска первого с учетом того, что открывающий тег может иметь еще параметры объекта, но все равно закрывается  ">" и без учета регистра по тегам. Заранее спасибо.


 
Palladin ©   (2009-07-03 12:11) [1]


> Исп. стандартные стредства типа Pos то же не улыбвает.

чем же интересно?


 
NIIL   (2009-07-03 12:16) [2]

Слишком много придеться учитывать и фильтровать, да и смысл когда это уже написано в этом классе


 
Palladin ©   (2009-07-03 12:17) [3]

а что там нужно учитывать? таблица одна?


 
NIIL   (2009-07-03 12:18) [4]

Нет не одна, точнее в том куске может быть их несколько и могут идти с разрывом.


 
Kolan ©   (2009-07-03 12:19) [5]


> к сожалению найти инф. о регулярных выр. для него не могу

http://regexpstudio.com/


 
NIIL   (2009-07-03 12:21) [6]

Читал. Пытаюсь вот так для строки, но не выходит:<TR[^>]*[</TR>]*>


 
Palladin ©   (2009-07-03 12:22) [7]

и тебе они все нужны?


 
NIIL   (2009-07-03 12:23) [8]

На самом деле пытаюсь парсить не полные таблицы, а их строки, а потом их ячейки


 
Сергей М. ©   (2009-07-03 12:26) [9]


> найти инф. о регулярных выр. для него не могу


Как это так ?
Класс этот поставляется разработчиком вместе со вполне внятной справкой в chm-формате .. Куда она у тебя потерялась ?)


 
NIIL   (2009-07-03 12:31) [10]

У меня она идет с небольшой справкой hlp формата в которой я не смог найти упоминания о способе получения текста между 2-мя искомыми выражениями. В сети нашел подобное упоминание <TR>(.+)</TR>, но оно к сожалению не проходит. Результат получаю в Match[0] - пуст после выполнения


 
Kolan ©   (2009-07-03 12:46) [11]

<TR>(.+)</TR> должно работать, только надо экранировать спец. символы, например: знак «/».


 
Сергей М. ©   (2009-07-03 12:47) [12]

А, вру .. действительно в формате hlp ..


procedure TForm1.Button5Click(Sender: TObject);
const
 s: String = "<tr>Всякая хрень</tr>";
var
 RegExpr: TRegExpr;
begin
 RegExpr := TRegExpr.Create;
 RegExpr.ModifierI := True;
 RegExpr.Expression := "<TR>(.+)</TR>";
 if RegExpr.Exec(s) then
   ShowMessage(RegExpr.Match[1]);
end;


 
NIIL   (2009-07-03 12:48) [13]

Kolan © Можно поподробнее...
Вот так: <TR>(.+)<"/"TR> или для экранирования в TRegExp свои служ. символы?


 
NIIL   (2009-07-03 12:54) [14]

Понял в чем проблема. Выражение не парсило так как в html коде идет <TR class=...> Как можно расширить условия поиска 1-й метки до символа ">"


 
clickmaker ©   (2009-07-03 12:57) [15]

> Как можно расширить условия поиска 1-й метки до символа
> ">"

так же как и между > и <


 
NIIL   (2009-07-03 13:07) [16]

<TR(.+)>(.+)</TR> - возвращает всю строку от первого вхождения <TR до последнего </TR>, а мне нужно до первого закрытия, ограничить режим жадности, как это написано в мануале и еще хотелось бы получить текст без вхождения поисковых тегов


 
NIIL   (2009-07-03 13:11) [17]

С Жадностью разобрался


 
NIIL   (2009-07-03 13:16) [18]

Все, вроде разобрался! Спасибо всем кто учавствовал


 
NIIL   (2009-07-03 14:37) [19]

И еще. Подскажите перебрать все включения можно через Match[i] или же через ExecNext. При использовании последнего вылетает ошибка отсутсвия процедуры ExecPos. Не понятно как с ней работать.


 
antonn ©   (2009-07-03 14:43) [20]

примерно так:
procedure GetIPList(Str, RegStr: String; LB: TListBox);
var RE: TRegExpr;
   Ulist: TStrings;
   i: Integer;
begin
RE:=TRegExpr.Create;
Ulist:=TStringlist.Create;
try
 RE.Expression:=RegStr;
 if ExecRegExpr(RegStr,Str) then
  if RE.Exec(Str) then begin
    repeat
      LB.Items.Add( RE.Match[0] );
    until not RE.ExecNext;
 end;
finally
 RE.Free;
 Ulist.Free;
end;
end;


 
Сергей М. ©   (2009-07-03 14:46) [21]


> NIIL   (03.07.09 14:37) [19]


ExecNext() возвращает новый список Match[]



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
2-1246131301
Alexei
2009-06-27 23:35
2009.08.30
Переход по ссылке в WebBrowser e


15-1246310150
Cerberus
2009-06-30 01:15
2009.08.30
Вопрос про OEM лицензию WIN.


15-1246253417
Rouse_
2009-06-29 09:30
2009.08.30
Я даж не знаю плакать или смеяться. :)


15-1246521108
Andy BitOff
2009-07-02 11:51
2009.08.30
Помогите найти изображение...


2-1246522630
Varkan
2009-07-02 12:17
2009.08.30
IdTCPClient1+IdTCPserver1 передача - получение файла