0

我有一些如下代码。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)
4

3 回答 3

1

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

于 2012-06-29T11:02:52.677 回答
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
于 2012-06-27T22:10:12.373 回答
0

如果您只对可以进行的匹配次数感兴趣

m = Regexp.new(re, Regexp::IGNORECASE);
puts string.scan(m).length
于 2012-06-27T18:44:28.327 回答