-1

我有一个像这样的字符串:

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"

但它又丑又慢。

我也尝试了正则表达式 and File.split,但我得到了更难看的一团糟。

解决办法是什么?

4

1 回答 1

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

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

在这里您可以看到它的实际效果

于 2012-10-31T15:52:56.973 回答