I have a path string similar to:
/some/long/path/filename.extension
and I need to parse the part of "filename" in ruby
Use the suffix parameter of the File.basename method:
File.basename
# irb irb(main):001:0> File.basename('/some/long/path/filename.extension', '.*') => "filename" irb(main):002:0> File.basename('/some/long/path/filename.v1.extension', '.*') => "filename.v1"
Link: http://www.ruby-doc.org/core/classes/File.html#M000026
There is also a Pathname class:
require 'pathname' Pathname.new("/a/b/c/d.txt").basename.to_s => "d.txt"
if you are looking for a regex solution (like in tags), here it is:
irb> "/some/long/path/filename.ext1.ext2".gsub(%r{.*/|\..*$},'') => "filename"
or a more efficient solution without regular expression:
irb> path = "/some/long/path/filename.ext1.ext2" => "/some/long/path/filename.extension" irb> filename = path[path.rindex('/')+1..-1] => "filename.ext1.ext2"
and crop extension (s):
if you want to trim the last one:
irb> filename[0,filename.rindex('.')] => "filename.ext1"
if you want to remove all extensions (the same behavior as resolving regular expressions):
irb> filename[0,filename.index('.')] => "filename"