Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 切断给定字符串的文件名和扩展名_Ruby_Regex_String_Path - Fatal编程技术网

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

Ruby 切断给定字符串的文件名和扩展名,ruby,regex,string,path,Ruby,Regex,String,Path,我构建了一个小脚本,用于解析给定文件类型文件的目录,并将位置(包括文件名)存储在数组中。这个看起来像这样: def getFiles(directory) arr = Dir[directory + '/**/*.plt'] arr.each do |k| puts "#{k}" end end 输出是路径和文件。但我只想要那条路 我只想要/foo,而不是/foo/bar.txt/ 我的第一个想法是一个regexp,但我不知道该怎么做。我会用斜杠将它拆分成一个数组,然后删除

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

def getFiles(directory)
  arr = Dir[directory + '/**/*.plt']
  arr.each do |k|
    puts "#{k}"
  end
end
输出是路径和文件。但我只想要那条路

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


我的第一个想法是一个regexp,但我不知道该怎么做。

我会用斜杠将它拆分成一个数组,然后删除最后一个元素(文件名),然后再将它合并成一个字符串

path = '/foo/bar.txt'

path = path.split '/'
path.pop
path = path.join '/'

# path is now '/foo'

以下代码应该可以工作(在ruby控制台中测试):

rindex查找最后一次出现的子字符串的索引。这是文件


祝你好运

不确定您使用的是哪种语言,但这里是字符串最后/结尾的正则表达式

/[^\/]*+$/

对字符串结尾之前不是“/”的所有字符进行音译

您不需要正则表达式或拆分

File.dirname("/foo/bar/baz.txt")
# => "/foo/bar"
有什么用吗

File.dirname(文件名)→ 目录名称

返回文件名的所有组件 以文件名给出,最后一个除外 一文件名必须使用 正斜杠(`/'')不考虑 本地文件上使用的分隔符 系统

File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work"

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

.*/
.*/