Ruby Hpricot RegEx заменяет <BR>на <P>
Может кто-нибудь сказать мне, как конвертировать эту строку Javascript в Ruby с помощью Hpricot & RegEx?
// Replace all doubled-up <BR> tags with <P> tags, and remove fonts.
var pattern = new RegExp ("<br/?>[ \r\n\s]*<br/?>", "g");
document.body.innerHTML = document.body.innerHTML.replace(pattern, "</p><p>").replace(/<\/?font[^>]*>/g, '');
У меня есть код настройки:
require 'rubygems'
require 'hpricot'
require 'open-uri'
@file = Hpricot(open("http://www.bubl3r.com/article.html"))
Спасибо
3 ответа
Кажется, что содержимое URL-адреса OP изменилось, как это обычно происходит в Интернете, поэтому я собрал несколько примеров HTML-кода, чтобы показать, как мне поступить.
Кроме того, Nokogiri - это то, что я рекомендую как Ruby HTML/XML-парсер, потому что он очень активно поддерживается, надежен и гибок.
require 'nokogiri'
html = <<EOT
<html>
<body>
some<br><br>text
<font>
text wrapped with font
</font>
some<br>more<br>text
</body>
</html>
EOT
doc = Nokogiri::HTML(html)
# Replace all doubled-up <BR> tags with <P> tags, and remove fonts.
doc.search('br').each do |n|
if (n.previous.name == 'br')
n.previous.remove
n.replace('<p>')
end
end
doc.search('font').each do |n|
n.replace(n.content)
end
print doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body>
# >> some<p></p>text
# >>
# >> text wrapped with font
# >>
# >> some<br>more<br>text
# >> </body></html>
Даже при том, что это не будет производить действительный HTML, кое-что как это работает:
require 'rubygems'
require 'hpricot'
require 'open-uri'
@file = Hpricot(open("http://www.bubl3r.com/article.html"))
puts @file.html.gsub('<br />', '<p>')
Я думаю, что лучший способ очистить html-файл - это красивый суп. Я использую его для Python, и он делает очень хорошую работу, потому что он эмулирует некоторую часть семантики HTML-браузера.