Splitting a string

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

Alle giovedì 28 giugno 2007, Lars A. 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

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 C. wrote:

Alle giovedì 28 giugno 2007, Lars A. 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

On 28.06.2007 13:51, Lars A. 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

On 6/28/07, Lars A. [email protected] 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