Без контекста трудно дать вам что-нибудь, что могло бы работать в более общем случае.
Этот код будет работать для вашего конкретного примера, просто используя регулярные выражения и eval, но я не хотел бы использовать подобный код на практике.
Для более сложного анализа строк вы можете использовать http://treetop.rubyforge.org/ или аналогичный. Но тогда вы попадаете на территорию написания собственного языка.
h = "one(two(three four) five six) seven"
s = h.tr "()", "{}"
s = "{#{s}}"
s = s.gsub /(\w+)/, '"\1" =>'
s = s.gsub /\>\s\"+/, '> nil, "'
s = s.gsub /\>\}+/, '> nil },'
s = s[0..-2]
puts h
r = eval(s)
puts r.inspect
puts r.class.name
Был ли какой-то конкретный пример, на который вы пытались получить ответ?
Кроме того, я мог бы добавить, что вы можете значительно упростить свою жизнь, если сможете предоставить строки, которые более естественным образом соответствуют анализу Ruby. Очевидно, это зависит от того, имеете ли вы контроль над источником.