Ruby Hpricot RegEx将<s>替换为<p>的</p>

时间:2010-08-09 00:49:31

标签: javascript ruby regex hpricot

有人可以告诉我如何使用Hpricot&amp; amp;将这行Javascript转换为Ruby。正则表达式?

// 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 个答案:

答案 0 :(得分:1)

OPs网址的内容似乎已经发生了变化,就像在互联网上经常发生的那样,所以我拼凑了一些示例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>

答案 1 :(得分:0)

我认为清理html文件的更好方法是美味的汤。我将它用于python并且它做得非常好,因为它模仿了html浏览器语义的某些部分。

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

答案 2 :(得分:0)

即使它不会产生有效的HTML,这样的东西也可以:

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

@file = Hpricot(open("http://www.bubl3r.com/article.html"))
puts @file.html.gsub('<br />', '<p>')