Что нового

[RegExp] Извлечь слово из множества html страниц

Death

Новичок
Сообщения
12
Репутация
0
Есть 5000 html страниц, сохранённых на жёстком диске.
Страницы разные, но в каждой есть определённая строка и в ней слово:
<td class="catRight" width="60%"><b><span class="gen">All about slovo</span></b></td>

Как извлечь это слово с каждой страницы с помощью регулярного выражения?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file=FileRead(@ScriptDir&'\123')
$str=StringRegExp($file,'(?si)<td class="catRight" width="60%"><span class='& _
           '"gen">All about(.*?)</span></td>',3)
_ArrayDisplay($str)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может достаточно :
Код:
$sText = "<td class='catRight' width='60%'><span class='gen'>All about slovo</span></td>"

$sPatern = "(?si).*?All about\h*([^<]+)<.*"
$sResult = StringRegExpReplace( $sText, $sPatern, '$1' )
MsgBox(4096, ' Test Result', $sResult)


если нет- добавляешь вначало шаблона необходимые теги
 
Автор
D

Death

Новичок
Сообщения
12
Репутация
0
sngr, так у меня не работает.
Код:
for $i=1 to 50000
if FileGetSize(@ScriptDir & "\"&$i&".html") > 21000 Then
$file=FileRead(@ScriptDir & "\"&$i&".html")
$str=StringRegExp($file,'(?si)<td class="catRight" width="60%"><span class='& _
           '"gen">All about(.*?)</span></td>',3)
FileWrite(@ScriptDir & "\result.txt",$str)
FileWrite(@ScriptDir & "\result.txt",@CRLF)
Endif
Next

В файле result.txt получаются одни единички:


gregaz, а как это сделать для html файла?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
FileWrite(@ScriptDir & "\result.txt",$str[0])
Если у тебя по 1 искомому значению на файл. StringRegExp с флагом 3 возвращает массив.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Death [?]
gregaz, а как это сделать для html файла?

Получаешь текст страницы

Код:
$sText = FileRead(@ScriptDir & "\1.html")


Находишь в нем слово
Код:
$sPatern = "(?si).*?All about\h*([^<]+)<.*"
$sResult = StringRegExpReplace( $sText, $sPatern, '$1' )
MsgBox(4096, ' Test Result', $sResult)


Если в тексте имеется несколько конструкций с All about, то надо добавить нужныый тег в шаблон
Скажем :
Код:
$sPatern = "(?si).*?<span class='gen'>All about\h*([^<]+)<.*"


Все зависит от уникальности твоей строки для всех текстов

Для ускорения обработки можно ограничить поиск:
Код:
$sResult = StringRegExpReplace( $sText, $sPatern, '$1', 1 )
 
Автор
D

Death

Новичок
Сообщения
12
Репутация
0
gregaz, спасибо, всё работает как надо.
 
Верх