计算方法中的regexp匹配

时间:2012-06-27 18:27:06

标签: ruby-on-rails ruby nokogiri

我有一些代码,如下所示。只要在comment中发生某些评论,就会调用html方法。然后,我正在进行正则表达式匹配,我想计算解析注释中的匹配数。它的印刷如下

1
2
3
4
5

我想要的只是打印5,因为这是匹配的总数。有人可以帮忙吗。

class PlainTextExtractor < Nokogiri::XML::SAX::Document
  def comment(string)
    # I am defining some regexp here 
    m = Regexp.new(re, Regexp::IGNORECASE);
    if m.match(string)
      $count += 1
      puts $count 
    end
  end
end

parser = Nokogiri::HTML::SAX::Parser.new(PlainTextExtractor.new)
parser.parse_memory(html)

3 个答案:

答案 0 :(得分:1)

只需将puts $count移出循环即可。在调用解析器之后,您可以将它放在最后。

答案 1 :(得分:0)

如果您只对可以进行的比赛数量感兴趣

m = Regexp.new(re, Regexp::IGNORECASE);
puts string.scan(m).length

答案 2 :(得分:0)

一种方法是让你的类在实例变量内部计算匹配数,例如@count。然后使用attr_reader创建一个方法,允许您在最后读取其值。您也不需要全局变量。示例(未测试):

class PlainTextExtractor < Nokogiri::XML::SAX::Document
  attr_reader :count
  def comment(string)
    # I am defining some regexp here 
    m = Regexp.new(re, Regexp::IGNORECASE);
    if m.match(string)
      @count += 1
    end
  end
end

pt_extractor = PlainTextExtractor.new
parser = Nokogiri::HTML::SAX::Parser.new(pt_extractor)
parser.parse_memory(html)
puts pt_extractor.count