Robert Klemme
3/14/2009 9:59:00 AM
On 13.03.2009 20:46, Joel VanderWerf wrote:
> Mmcolli00 Mom wrote:
>> 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(/_.*/,"")
>
> 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.
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