用Ruby解析字符串路径名

4

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

/some/long/path/filename.extension

我需要在Ruby中解析出“文件名”部分。

3个回答

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

该链接提供了Ruby编程语言中File类的文档。其中,方法M000026是File类的实例方法之一。这个方法可以将文件名作为参数,并返回一个布尔值,表示该文件是否存在。


7

还有Pathname类:

require 'pathname'

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

2
  1. if you are looking for regex solution (as in tags), here it is:

    irb> "/some/long/path/filename.ext1.ext2".gsub(%r{.*/|\..*$},'')
    => "filename"
    
  2. or more effective solution without regexp:

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

    and to crop the extension(s):

    • if you want to crop the last one:

      irb> filename[0,filename.rindex('.')]
      => "filename.ext1"
      
    • if you want to strip all the extensions (the same behaviour like the regex solution):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接