У меня довольно простое регулярное выражение, но я хотел использовать именованные регулярные выражения, чтобы сделать его более чистым, а затем перебрать результаты.
Строка тестирования:
testing_string = "111x222b333"
Мое регулярное выражение:
regexp = %r{
(?<width> [0-9]{3} ) {0}
(?<height> [0-9]{3} ) {0}
(?<depth> [0-9]+ ) {0}
\g<width>x\g<height>b\g<depth>
}x
dimensions = regexp.match(testing_string)
Эта работа похожа на очарование, но здесь, где проблема:
dimensions.each { |k, v| dimensions[k] = my_operation(v) }
# ERROR !
undefined method `each' for #<MatchData "111x222b333" width:"111" height:"222" depth:"333">.
В объекте MatchData нет метода each
, и я действительно не хочу, чтобы обезьяна исправляла его.
Как я могу исправить эту проблему?
Мне было не так ясно, как я думал: нужно сохранить имена и хэш-подобную структуру.