From: Robert Klemme Date: 2009-03-14T18:57:55+09:00 Subject: Re: regular expression / gsub question 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