2012-06-27 2 views
0

У меня есть код, как показано ниже. comment метод вызывается всякий раз, когда возникает какой-либо комментарий в html. Затем я выполняю регулярное выражение, я хочу подсчитать количество совпадений в проанализированных комментариях. Его печать, как показано нижеподсчет регулярных выражений в пределах метода

1 
2 
3 
4 
5 

, что я хочу, чтобы просто напечатать 5 потому что то общее количество матчей. может кто-то помочь PLS.

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) 
+1

Просто переместите свой 'puts $ count' из цикла. Вы можете положить его в конце, после того как вы вызовете парсер. –

+0

простой! это сработало. благодаря! все для комментариев – user1207289

+0

Я ответил на мой вопрос, если вы решили принять его :) –

ответ

0

Если вы заинтересованы только в количестве матчей вы можете сделать

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

Я попробовал выше предложение, оно напечатано следующим образом: '00000100000100000100000100000 – user1207289

+0

не могли бы вы привести пример? Включите, что такое ваше регулярное выражение, и строку. – Olives

+0

ОК, поэтому парсер проанализировал 29 комментариев в html. для каждого комментария 'comment' вызывается, и регулярное выражение, которое хранится в 're', ищет шаблон' HouseAd: [false] '. из 29 строк комментариев он напечатал 1 везде, где был матч и остался 0. regex is 're1 = '(HouseAd)' re2 = '(:)' re3 = '. *?' re4 = '(\\ [false \\])' re = (re1 + re2 + re3 + re4)' дайте мне знать, если это имеет смысл или вам нужно что-то еще. благодаря! – user1207289

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 
1

Просто переместите puts $count из петли. Вы можете положить его в конце, после того как вы вызовете парсер.

Смежные вопросы