我的路径字符串类似于:
/some/long/path/filename.extension
我需要在ruby
中解析“filename”部分答案 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"
答案 1 :(得分:6)
还有Pathname类:
require 'pathname'
Pathname.new("/a/b/c/d.txt").basename.to_s
=> "d.txt"
答案 2 :(得分:2)
如果您正在寻找正则表达式解决方案(如在标签中),这里是:
irb> "/some/long/path/filename.ext1.ext2".gsub(%r{.*/|\..*$},'')
=> "filename"
或没有正则表达式的更有效的解决方案:
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"