将字符串拆分为路径的更快更干净的方法

时间:2012-10-31 15:51:03

标签: ruby

我有一个字符串:

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,但是我得到了一个更加丑陋的混乱。

解决方案是什么?

1 个答案:

答案 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] )

它在所有版本上运行良好。

Here you can see it in action