数组或散列中的正则表达式 - 排序

时间:2013-09-02 18:51:11

标签: ruby regex arrays

我有一个工作文件夹目录。

holder = Dir.glob("*")
=> holder = ["Project One", "Project Two", "Project Three", "Backups", "Summer 2012"]

我想在我的脚本中使用正则表达式将另一个目录中的新文件排序到上面的一个Project目录中。我可以使用regex.match命令轻松完成此操作。

other_files = ["Project One Picture 2399.jpg", "Project Two Doc.txt"]
if /project\Done/i.match(other_files[0])
#if true cp to Project One directory i think you get the point

我想从holder数组创建正则表达式。所以我需要做的就是创建另一个文件夹,脚本将在数组中添加另一个正则表达式。是否有捷径可寻?或者有没有办法在阵列中存储正则表达式?

regex_array = ["/project\Done/i", "/project\Dtwo/i", "/project\Dthree/i", "/backups/i", "/summer\W\d\d\d\d/i"]

2 个答案:

答案 0 :(得分:3)

Regexp.new创建了一个新的正则表达式:

Regexp.new 'your expression'
# => /your expression/

您可以将这些推送到regex_array。您可以将它们存储为正则表达式,而不是字符串。

regex_array = holder.map {|folder| Regexp.new(folder.downcase, Regexp::IGNORECASE) }
# => [/project one/i, /project two/i, /project three/i]

答案 1 :(得分:0)

您可以使用以下内容跳过regex_array:

holder = ["Project One", "Project Two", "Project Three", "Backups", "Summer 2012"]
other_files = ["Project One Picture 2399.jpg", "Project Two Doc.txt"]
other_files.each do |f|
  dir = holder.find {|d| f =~ /#{d}/i} 
  # copy file f to dir if dir
end

...虽然你可能想要一个更精细的正则表达式。