[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

splitting a string

Lars Andren

6/28/2007 11:52:00 AM

I've got a problem when trying to split a string after the thrid
occurrence of a slash ('/'), I'm so used to java-thinking so I keep
wanting to iterate through it and save the position of the third
occurence and then cut the string at that index.

This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
it?
Grateful for any assistance,
Lars

--
Posted via http://www.ruby-....

4 Answers

Stefano Crocco

6/28/2007 12:12:00 PM

0

Alle giovedì 28 giugno 2007, Lars Andren ha scritto:
> I've got a problem when trying to split a string after the thrid
> occurrence of a slash ('/'), I'm so used to java-thinking so I keep
> wanting to iterate through it and save the position of the third
> occurence and then cut the string at that index.
>
> This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
> it?
> Grateful for any assistance,
> Lars

There may be better solutions, but this should work:

str.scan(/(?:[^\/]+(?:\/|$)){3}/)

This returns an array of strings obtained by splitting str after every
third /. The last entry of the array contains the rest of the string:

'a/b/cd/efg/h/i'.scan(/(?:[^\/]+(?:\/|$)){3}/)
=> ["a/b/cd/", "efg/h/i"]

I hope this helps

Stefano

Robert Klemme

6/28/2007 12:24:00 PM

0

On 28.06.2007 13:51, Lars Andren wrote:
> I've got a problem when trying to split a string after the thrid
> occurrence of a slash ('/'), I'm so used to java-thinking so I keep
> wanting to iterate through it and save the position of the third
> occurence and then cut the string at that index.
>
> This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
> it?

Depends on what you want to do, i.e. which part(s) of the string you
need. You can do

irb(main):003:0> s = (1..5).to_a.join '/'
=> "1/2/3/4/5"
irb(main):008:0> %r<\A((?:[^/]*/){2}[^/]*)/(.*)\z> =~ s
=> 0
irb(main):009:0> pre, post = $1, $2
=> ["1/2/3", "4/5"]
irb(main):010:0>

Or

irb(main):011:0> s[%r<\A((?:[^/]*/){2}[^/]*)/>]
=> "1/2/3"

Or...

Kind regards

robert

Lars Andren

6/28/2007 12:55:00 PM

0

Thanks a lot both of you! I can use Stefanos method since I only want to
use the part of the string before the third occurrence.
Lars

Stefano Crocco wrote:
> Alle giovedì 28 giugno 2007, Lars Andren ha scritto:
>> I've got a problem when trying to split a string after the thrid
>> occurrence of a slash ('/'), I'm so used to java-thinking so I keep
>> wanting to iterate through it and save the position of the third
>> occurence and then cut the string at that index.
>>
>> This doesnt seem to be the Ruby-way, anyone got ideas of how I should do
>> it?
>> Grateful for any assistance,
>> Lars
>
> There may be better solutions, but this should work:
>
> str.scan(/(?:[^\/]+(?:\/|$)){3}/)
>
> This returns an array of strings obtained by splitting str after every
> third /. The last entry of the array contains the rest of the string:
>
> 'a/b/cd/efg/h/i'.scan(/(?:[^\/]+(?:\/|$)){3}/)
> => ["a/b/cd/", "efg/h/i"]
>
> I hope this helps
>
> Stefano


--
Posted via http://www.ruby-....

Robert Dober

6/28/2007 6:09:00 PM

0

On 6/28/07, Lars Andren <lars.andren@asia.chalmers.se> wrote:
> Thanks a lot both of you! I can use Stefanos method since I only want to
> use the part of the string before the third occurrence.
> Lars
In that case you can do

str.split("/")[0..2].join("/")

Cheers
Robert

--
I always knew that one day Smalltalk would replace Java.
I just didn't know it would be called Ruby
-- Kent Back