Согласно документам, gsub
с хэшем в качестве второго параметра соответствует только литеральным строкам:
'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*') #=> "h3ll*"
Если вы хотите предоставить несколько хешей, вы можете обойти их, создав хеш, где пары ключ / значение являются парами поиска =>, переберите хеш и передайте их в gsub. Поскольку Ruby 1.9+ поддерживает порядок вставки хэша, вы гарантированно будете выполнять поиск в нужном вам порядке.
search_hash = {
'1' => 'one',
'too' => 'two',
/[\t ]+/ => ' '
}
str = "1, too,\t3 , four"
search_hash.each { |n,v| str.gsub!(n, v) }
str #=> "one, two, 3 , four"