使用ruby解析字符串路径名

时间:2011-08-24 02:51:53

标签: ruby-on-rails ruby regex

我的路径字符串类似于:

/some/long/path/filename.extension

我需要在ruby

中解析“filename”部分

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

还有Pathname类:

require 'pathname'

Pathname.new("/a/b/c/d.txt").basename.to_s
=> "d.txt"

答案 2 :(得分:2)

  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"