使用ruby解析字符串路径名

我有一个类似于的路径字符串:

/some/long/path/filename.extension 

我需要在ruby中解析“filename”部分

使用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" 

参考: http : //www.ruby-doc.org/core/classes/File.html#M000026

还有Pathname类:

 require 'pathname' Pathname.new("/a/b/c/d.txt").basename.to_s => "d.txt" 
  1. 如果您正在寻找正则表达式解决方案(如在标签中),这里是:

     irb> "/some/long/path/filename.ext1.ext2".gsub(%r{.*/|\..*$},'') => "filename" 
  2. 或者没有正则表达式的更有效的解决方案:

     irb> path = "/some/long/path/filename.ext1.ext2" => "/some/long/path/filename.extension" irb> filename = path[path.rindex('/')+1..-1] => "filename.ext1.ext2" 

    并裁剪扩展名:

    • 如果你想裁剪最后一个:

       irb> filename[0,filename.rindex('.')] => "filename.ext1" 
    • 如果要删除所有扩展(与正则表达式解决方案相同的行为):

       irb> filename[0,filename.index('.')] => "filename"