Ruby Hpricot RegEx заменяет <BR>на <P> - PullRequest
2 голосов
/ 09 августа 2010

Может кто-нибудь сказать мне, как конвертировать эту строку 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 ]

1 голос
/ 24 февраля 2011

Кажется, что содержимое 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>
0 голосов
/ 24 февраля 2011

Даже при том, что это не произведет действительный HTML, кое-что как это работает:

require 'rubygems'
require 'hpricot'
require 'open-uri'

@file = Hpricot(open("http://www.bubl3r.com/article.html"))
puts @file.html.gsub('<br />', '<p>')
0 голосов
/ 15 февраля 2011

Я думаю, что лучший способ очистить html-файл - это красивый суп.Я использую его для Python, и он делает очень хорошую работу, потому что он эмулирует некоторую часть семантики HTML-браузера.

http://www.crummy.com/software/RubyfulSoup/

...