我的任务:
编写程序以使用正则表达式重命名文件。这个 程序将采用三个命令行参数:其中的目录 重命名文件,一个匹配文件的正则表达式 重命名,以及用于替换正则表达式匹配的字符串。该 主要用途是更改文件扩展名,但它应该能够 处理替换文件名的任何部分。它应该运行为 如下:
./fixname.rb dir 'pattern' replacement
我写的程序是:
puts "Renaming files..."
folder_path = ARGV[0]
reg_exp = ARGV[1].to_regexp
Dir.glob(folder_path + "/*").sort.each do |f|
filename = File.basename(f, File.extname(f))
myString = String.new
myString = filename
filename = myString.gsub(reg_exp, ARGV[2])
#puts myString
File.rename(f, folder_path + "/" + filename + File.extname(f))
end
puts "Renaming complete."
当我使用正则表达式时,重命名不会发生,否则它正在运行。我得到了:
error "`gsub': no implicit conversion of nil into String (TypeError)"
答案 0 :(得分:1)
你认为正则表达式不是,它是一个包含正则表达式模式的字符串。
您需要将其转换为Regexp对象。如何做到这一点留给你。