我有一个字符串:
str = "/some/path/to/some/file.ext"
结果应该是:
[path, dir, file]
=> ["/some/path/to", "some", "file.ext"]
我目前的代码:
chunks = str.split '/'
=> ["", "some", "path", "to", "some", "file.ext"]
file = chunks.pop
=> "file.ext"
dir = chunks.pop
=> "some"
path = chunks.join '/'
=> "/some/path/to"
但它很丑陋而且很慢。
我也尝试过正则表达式和File.split
,但是我得到了一个更加丑陋的混乱。
解决方案是什么?
答案 0 :(得分:4)
使用pathname
:
require 'pathname'
str = "/some/path/to/some/file.ext"
p = Pathname.new str
path, dir, file = [p.dirname.parent, p.parent.basename, p.basename].map(&:to_s)
p( [path, dir, file] )
它在所有版本上运行良好。