string extraction

N

Navindra Umanee

Hi,

I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

Right now I'm doing:

string[/(\d*)\/*$/].delete('/')

But I've already matched the digit I want, so the delete is just
superfluous work. How can I extract the number without doing a
separate delete?

Thanks,
Navin.
 
E

Eko Budi Setiyo

Navindra said:
Hi,

I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

Right now I'm doing:

string[/(\d*)\/*$/].delete('/')

But I've already matched the digit I want, so the delete is just
superfluous work. How can I extract the number without doing a
separate delete?

Thanks,
Navin.
class String
def str_replace(what,with)
re = Regexp.new(Regexp.quote(what))
self.gsub(re) {with}
end

def str_ireplace(what,with)
re = Regexp.new(Regexp.quote(what), Regexp::IGNORECASE)
self.gsub(re) {with}
end
end

string='.///root/1068663688//1068824962/1068836207//1068932537///'

string = string.str_replace('///','')
string = string.str_replace('//','/')
temp = string.split('/')
return temp[4]

regards
Eko
 
M

Martin S. Weber

Hi,

I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

string[%r|/(\d+)/+$|, 1] ?

hth,

-Martin
 
D

David A. Black

Hi --

Hi,

I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

Right now I'm doing:

string[/(\d*)\/*$/].delete('/')

But I've already matched the digit I want, so the delete is just
superfluous work. How can I extract the number without doing a
separate delete?

You can use a negative-width lookahead:

string[/(\d*)(?=\/*$)/]


David
 
D

David A. Black

Hi -

Hi --

Hi,

I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

Right now I'm doing:

string[/(\d*)\/*$/].delete('/')

But I've already matched the digit I want, so the delete is just
superfluous work. How can I extract the number without doing a
separate delete?

You can use a negative-width lookahead:

Sorry, too little coffee. That's zero-width lookahead :)


David
 
N

Navindra Umanee

Martin S. Weber said:
string[%r|/(\d+)/+$|, 1] ?

Exactly what I was looking for, thanks. The zero-width positive
lookahead is also interesting.

str[regexp, fixnum]

Is there a similar way to combine and use different matched groups
instead of being restricted to a fixnum? Say instead of just \1 you
had a match for \1 and \2 and you wanted the output string to be \2 \1

"byru"[/(by)(ru)/, \2\1]

should output "ruby".

Thanks,
Navin.
 
B

Bertram Scharpf

Hi,

Am Samstag, 29. Jan 2005, 16:05:57 +0900 schrieb Navindra Umanee:
I have strings of the form:

string='.///root/1068663688//1068824962/1068836207//1068932537///'

Basically, I want to extract the last number in the string.

string[/(\d*)\/*$/].delete('/')

But I've already matched the digit I want, so the delete is just
superfluous work. How can I extract the number without doing a
separate delete?

Maybe you simply need to say

string[/\d+\/*$/].to_i

that doesn't mind trailing slashes.

Bertram
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,166
Messages
2,570,902
Members
47,442
Latest member
KevinLocki

Latest Threads

Top