如何通过字符串模式选择文件名?

时间:2016-06-07 12:48:27

标签: ruby regex

例如,我有以下名称的文件:

435_red.rb
32_red_blue.rb
9921_blue.rb

在第一种情况下,我需要按蓝色模式获取 9921_blue.rb 文件。

在第二种情况下,我必须按红色模式获取 435_red.rb 文件。

在第三种情况下,我需要使用 red_blue 模式 32_red_blue.rb 文件。

我怎样才能做到这一点?

我尝试使用类似的东西

pattern = "blue"

result = Dir.glob(File.join(directory, '**.*')).select do |f|
           f.match(pattern)
         end

但结果将返回两个值:

["32_red_blue.rb", "9921_blue.rb",]

而不仅仅是“9921_blue.rb”

2 个答案:

答案 0 :(得分:1)

也许是这样的

def get_files_by_pattern(dir, pattern)
  Dir.glob(File.join(dir, '/*.rb')).select do |f|
    f.split("/")[-1][/^\d*\_#{pattern}\.rb$/]
  end
end

答案 1 :(得分:1)

我认为你只需要使用正确的模式,使用正则表达式(regexp)。也许:

pattern = /\A\d+_blue\.rb\Z/

regexp是模式匹配字符串的强大工具。一些资源: