Hi
Do you know how use a regular expression to get only the scripname from
the each filename below? I have long filename and I want to pull out a
segment “scriptname” only. I have been using a regular expression with
gsub for this.
filename
userfilename_scriptname_030109.txt
userfilename3_scriptname1_031109.txt
userfilename_scriptname0_031209.txt
The gsub didn’t work because the _ on both sides causes me to delete the
whole filename. What would you recommend?
stripfirstpart = filename.gsub(//,"")
stripsecondpart = filename.gsub(/./,"")
Mmcolli00 Mom wrote:
userfilename_scriptname0_031209.txt
The gsub didn’t work because the _ on both sides causes me to delete the
whole filename. What would you recommend?
stripfirstpart = filename.gsub(//,"")
stripsecondpart = filename.gsub(/./,"")
I like using #[] for this because it lets you think in terms of what you
want to keep rather than what you want to remove.
filename[/(.*?)/, 1]
The ? is there in case there are more underscores later in the filename.
Thanks! This worked nicely. I have never used #[], this is great! Thanks
so much!!
You can also do a filename.split(/_/)[1] which is probably not that
efficient but you can get all three parts of the string.
On 13.03.2009 20:46, Joel VanderWerf wrote:
userfilename3_scriptname1_031109.txt
want to keep rather than what you want to remove.
filename[/(.*?)/, 1]
The ? is there in case there are more underscores later in the filename.
AFAIK it is more robust and also more efficient to do
filename[/([^]+)_/, 1]
or even
filename[/(scriptname\d*)/, 1]
or even
filename[/\Auserfilename\d*(scriptname\d*)\d+.txt\z/, 1]
In other words, rather explicitly define precisely what you want to
match than rely on (non)greediness of repetition operators.
Kind regards
robert
Milan D. wrote:
You can also do a filename.split(/_/)[1]
which is probably not that
efficient but you can get all three parts of the string.
Do you mean “not that efficient” in the sense that ruby programs are
ponderously slow and that isn’t?