切断给定字符串的文件名和扩展名

时间:2009-03-27 22:27:11

标签: ruby regex string path

我构建了一个小脚本,用于解析给定文件类型的文件的目录,并将该位置(包括文件名)存储在数组中。看起来像这样:

def getFiles(directory)
  arr = Dir[directory + '/**/*.plt']
  arr.each do |k|
    puts "#{k}"
  end
end

输出是路径和文件。但我只想要这条路。

而不是/foo/bar.txt我只想要/ foo /

我的第一个想法是正则表达式,但我不知道该怎么做。

6 个答案:

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

对于正则表达式,这应该有效,因为*是贪婪的:

.*/