0

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

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

我想在我的脚本中使用正则表达式将另一个目录中的新文件排序到上面的项目目录之一中。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"]
4

2 回答 2

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]
于 2013-09-02T19:05:20.287 回答
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

...尽管您可能需要更精细的正则表达式。

于 2013-09-02T19:30:42.470 回答