2012-06-17 2 views
-1

Мне нужно извлечь этот текст:RegEx необходима помощь с извлечением HTML теги

Line 1 text. 
Line 2 text. Line 2 some more text. 
Line 3 text, 
Line 4 text 

из этого HTML:

... 
<tr><td class="td_my_custom_text">Line 1 text. 
<br>Line 2 text. Line 2 some more text. 
<br>Line 3 text, 
<br>Line 4 text 
<br></td></tr><tr><td>&nbsp;</td></tr> 
... 

Используя этот RegEx: <td\ class="td_my_custom_text">[\s\S]*?</td> мне удалось получить что-то близкое, но не близко достаточно. <td class="td_my_custom_text">, <br> и </td> все еще внутри, и я застрял.

  1. Что нужно изменить в моем регулярном выражении, чтобы избавиться от них?
  2. Есть ли какой-нибудь инструмент Windows для автоматизации этого задания и копирования только извлеченных данных в новые файлы? У меня есть 5000+ файлов, подобных этому, и я думаю о создании небольшой программы с использованием парсера regex или html, но я хотел бы знать, есть ли лучший подход в первую очередь.
+8

[О, нет!] (Http://stackoverflow.com/q/1732348/335858) – dasblinkenlight

ответ

2

Похоже, вы лучше снимаете теги, потому что это то, что вы делаете.

Вы также должны посмотреть ссылку dasbinkenlight в своем комментарии, чтобы больше узнать о разборе HTML.

+0

«Вы также должны посмотреть ссылку dasbinkenlight» - О да. Не пропустите! – Smandoli

1

Вы можете использовать COM-интерфейс Internet Explorer. Использование языка AutoHotkey_L.

ex_html = 
(
<tr><td class="td_my_custom_text">Line 1 text. 
<br>Line 2 text. Line 2 some more text. 
<br>Line 3 text, 
<br>Line 4 text 
<br></td></tr><tr><td>&nbsp;</td></tr> 
) 


pwb := ComObjCreate("InternetExplorer.Application") 
pwb.navigate("about:blank") 
pwb.document.body.innerHTML := ex_html 
text := pwb.document.body.innerText 
pwb.quit() 


MsgBox % text 

Он переходит на пустую страницу, впрыскивает HTML-код, а затем использует свойство innerText DOM, чтобы очистить все специальные теги.

Запуск внутренних HTTML и внутренних строк текста в цикле позволяет быстро очистить все ваши входы HTML. Ознакомьтесь с командами типа FileRead и Loop (files & folders) для получения справки по доступу к нескольким входным файлам.

+0

Я не до конца проверяю этот ответ, но повышаю ясность и дополнительные ресурсы. – Smandoli

2

Вы можете использовать замену regex, чтобы удалить все теги html (любой текст в пределах <>), но в вашем примере вы останетесь с &nbsp;. Лучшим подходом был бы парсер HTML. В зависимости от вашего языка программирования могут быть библиотеки, которые вы можете использовать.

Вы можете попробовать подход FakeRainBrigand или даже адаптировать его к VBScript: создать .vbs файл и добавьте следующий код теста:

Set objIE = CreateObject("internetexplorer.application") 

strHTML = "<tr><td class='td_my_custom_text'>Line 1 text. <br>Line 2 text.<br></td></tr><tr><td>&nbsp;</td></tr>" 

objIE.navigate("about:blank") 
objIE.document.body.innerHTML = strHTML 

msgbox objIE.document.body.innerText 

Сохраните файл. При открытии появится окно с текстовым HTML. Затем вы можете использовать Scripting.FileSystemObject для отображения всех файлов в папке и обработки по одному. Существует несколько примеров того, как это сделать - например, VBScript to detect today's modified files in a folder (including subfolders inside it) другие примеры, если вы Google "VBS список всех файлов в папке".

Смежные вопросы