Phrogz
12/15/2007 4:53:00 PM
On Dec 15, 8:47 am, Xavier Noria <f...@hashref.com> wrote:
> On Dec 15, 2007, at 4:39 PM, Sebastian Hungerecker wrote:
>
>
>
> > Gary C40 wrote:
> >> If I have this string:
> >> abcd1234abc123
> >> Now I want to separate the digit group with the non-digit group
> >> into an
> >> array like this ["abcd",1234,"abc",123]. It's like re.split in
> >> Python.
> >> How can I do it in Ruby with the least lines of code possible?
> >> 'abcd1234abc123'.split(/\d+/) only returns ["abcd","abc"]
>
> > If the regex has capturing groups you'll get those in the array as
> > well.
> > 'abcd1234abc123'.split(/(\d+)/) #=> ["abcd", "1234", "abc", "123"]
>
> > If you need the numbers as integers, you could use something like:
> > 'abcd1234abc123'.scan(/(\D+)(\d+)?/).map {|nd,d| [nd,d.to_i]}
> > #=> [["abcd", 1234], ["abc", 123]]
> > (Maybe add flatten and compact)
>
> Just another one:
>
> 'abcd1234abc123'.scan(/\D+|\d+/) # ["abcd", "1234", "abc", "123"]
And another, from 1.9:
irb(main):004:0> str.split /(?<=\D)(?=\d)|(?<=\d)(?=\D)/
=> ["abcd", "1234", "abc", "123"]