У меня проблема, и мне нужно найти быстрое решение.Удалите определенные теги, если они находятся внутри определенного тега
Я хочу удалить теги «br» и «p» внутри всех «таблиц», но не снаружи.
Для примера.
Первоначальный документ HTML:
...
<p>Hello</p>
<table>
<tr>
<td><p>Text example <br>continues...</p></td>
<td><p>Text example <br>continues...</p></td>
<td><p>Text example <br>continues...</p></td>
<td><p>Text example <br>continues...</p></td>
</tr>
</table>
<p>Bye<br></p>
<p>Bye<br></p>
...
Моя цель:
...
<p>Hello</p>
<table>
<tr>
<td>Text example continues...</td>
<td>Text example continues...</td>
<td>Text example continues...</td>
<td>Text example continues...</td>
</tr>
</table>
<p>Bye<br></p>
<p>Bye<br></p>
...
Теперь, вот мой способ очистки:
loop do
if html.match(/<table>(.*?)(<\/?(p|br)*?>)(.*?)<\/table>/) != nil
html = html.gsub(/<table>(.*?)(<\/?(p|br)*?>)(.*?)<\/table>/,'<table>\1 \4</table>')
else
break
end
end
То работает, но проблема в том, У меня есть документы 1xxx, и у каждого есть около 1000 строк ... и занимает 1-3 часа каждый. ((1-3 часа) * (тысячи документов)) = ¡боль!
Мне кажется, что это делается с помощью санитаза или другого метода, но ... на данный момент ... Я не нахожу пути.
Может кто-нибудь мне помочь?
Спасибо заранее! Ману
http://stackoverflow.com/a/1732454/438992 Другими словами, использовать фактический HTML-парсер , –
^Чтобы добавить к рассмотренному выше, изучите использование 'Nokogiri' для этого. –
** Не используйте регулярные выражения для анализа HTML. Используйте подходящий модуль синтаксического анализа HTML. ** Вы не можете надежно проанализировать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/ruby о примерах правильного анализа HTML с помощью модулей Ruby, которые уже были написаны, протестированы и отлажены. –