2013-06-14 1 views
0

Я использую функцию сканирования с регулярным выражением, которое возвращает следующие объекты. Результат сканирования присваивается h.Получение каждого экземпляра строки соответствия из MatchData

Когда я называю h [0], однако я получаю только один экземпляр somedata1, даже если встречается более одного раза. Как я могу отфильтровать результаты, чтобы подсчитать каждый экземпляр строки?

#<MatchData "somedata1">, #<MatchData "somedata1">, #<MatchData "somedata2"> 

++++++++++++++++++++++++++++++++++++ EDIT ++++++ +++++++++++++++++++++++++++++++

"sometext".to_enum(:scan, /someregex/).map { Regexp.last_match } 
+0

'String # scan' возвращает массив строк, почему у вас есть массив экземпляров' MatchData'? – Stefan

+0

Я добавил код, который я использую выше. Я хотел бы сохранить каждый экземпляр, который соответствует регулярному выражению, а не только первый экземпляр. –

ответ

0

Оказывается, что просто перекручивание/вывода через каждый экземпляр #<MatchData ""> сделал трюк

0

Вы можете рассчитывать на результат с count.

h является массивом, так что вы можете сделать

h.count 
+0

Нет, подсчет должен был бы появиться после получения соответствующей строки. У меня все еще нет возможности захватить все соответствующие экземпляры. –

0

Вы должны рассчитывать, когда вы сканировании или использовать group_by

r = a.group_by{|s| s.data} 
r.each{|k,v| p k + "=" + v.count.to_s} 
Смежные вопросы