【问题标题】:Cut off the filename and extension of a given string截断给定字符串的文件名和扩展名
【发布时间】:2009-03-27 22:27:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ruby regex string path


    【解决方案1】:

    File.dirname 有什么用吗?

    File.dirname(file_name) → dir_name

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

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

    【讨论】:

      【解决方案2】:

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

      File.dirname("/foo/bar/baz.txt")
      # => "/foo/bar"
      

      【讨论】:

        【解决方案3】:

        以下代码应该可以工作(在 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

        祝你好运!

        【讨论】:

          【解决方案4】:

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

          path = '/foo/bar.txt'
          
          path = path.split '/'
          path.pop
          path = path.join '/'
          
          # path is now '/foo'
          

          【讨论】:

            【解决方案5】:

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

            /[^\/]*+$/
            

            转译为字符串结尾之前不是'/'的所有字符

            【讨论】:

              【解决方案6】:

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

              .*/
              

              【讨论】:

                猜你喜欢
                • 2013-06-02
                • 1970-01-01
                • 2015-12-07
                • 2016-04-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-06-02
                • 2022-11-11
                相关资源
                最近更新 更多