From: Brian Nice Date: 2006-09-01T03:49:23+09:00 Subject: Re: splitting string to hash William Crawford wrote: > Brian Nice wrote: >> I have a strings like the following: >> s1- "[1] Hello [2] bye" >> s2- "[1] Hello [2] bye [2:1] continue [2] more" >> >> I want to convert them to hashes like >> h1- {1 => "Hello", 2 => "bye"} >> h2- {1 => "Hello", 2 => "bye", "2:1" => "continue", "2:2" => more"} >> >> Is there an easy Ruby way to do this? >> Thanks for the help >> Brian > > Assuming that James is correct in that :2 is missing from the second > string, this works: > > h2 = Hash[*s2.scan(/\[([^\[\]]+)\] (\w+)/).flatten] > > (I'm starting to really like Ruby.) > > In case that's not clear, scan uses a regex to provide an array of > 2-element arrays from the text. Then flatten makes it into a single > array, then the * turns it into a list of just values, instead of an > array. Then Hash[] turns each 2 values into a hash. Actually the original was correct - the second 2 should have a key of 2:2 even though it only appears in the original string as 2 (since it follows a 2:1, it is assumed that any number after it would be 2:x. If there was a 3:1 sometime later, then the next two would have a key of 3:2) s2- "[1] Hello [2] bye [2:1] continue [2] more" Thanks for the help Brian -- Posted via http://www.ruby-forum.com/.