我构建了一个小脚本,用于解析给定文件类型的文件的目录,并将该位置(包括文件名)存储在数组中。看起来像这样:
def getFiles(directory)
arr = Dir[directory + '/**/*.plt']
arr.each do |k|
puts "#{k}"
end
end
输出是路径和文件。但我只想要这条路。
而不是/foo/bar.txt我只想要/ foo /
我的第一个想法是正则表达式,但我不知道该怎么做。
答案 0 :(得分:7)
File.dirname可以用吗?
File.dirname(file_name)→dir_name
返回文件名的所有组件 在file_name中给出,除了最后一个 一。必须使用形成文件名 正斜杠(``/'')无论如何 本地文件上使用的分隔符 系统
File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work"
答案 1 :(得分:4)
您不需要正则表达式或拆分。
File.dirname("/foo/bar/baz.txt")
# => "/foo/bar"
答案 2 :(得分:1)
以下代码应该有效(在ruby控制台中测试):
>> path = "/foo/bar/file.txt"
=> "/foo/bar/file.txt"
>> path[0..path.rindex('/')]
=> "/foo/bar/"
rindex查找最后一次出现的子串的索引。这是文档http://docs.huihoo.com/api/ruby/core/1.8.4/classes/String.html#M001461
祝你好运!答案 3 :(得分:0)
我会用斜杠将它拆分成数组,然后删除最后一个元素(文件名),然后再将它连接成一个字符串。
path = '/foo/bar.txt'
path = path.split '/'
path.pop
path = path.join '/'
# path is now '/foo'
答案 4 :(得分:0)
不确定你的语言是什么,但这里是字符串的最后/结尾的正则表达式。
/[^\/]*+$/
在字符串结尾之前音译到非'/'的所有字符
答案 5 :(得分:0)
对于正则表达式,这应该有效,因为*是贪婪的:
.*/