搜索具有特定模式的文件

时间:2017-01-22 15:18:55

标签: ruby-on-rails ruby regex glob

我试图使用模式

在目录中查找特定文件

让我说我有用户的身份证 - 101

这是我的文件

101
101_2
101_5
10111
103
10125
101_6

我试图形成一个只给我文件的正则表达式模式(101,101_2,101_5,101_6)

我正在尝试以下模式

^101_?\d+$

但它似乎根本没有选择任何文件。如果我因某种原因删除^。仅101_6次匹配。

编辑:

我使用rails / ruby​​来查找特定目录中的文件。像

这样的东西
Dir.glob(location).grep("^101_?\d+$")
 do something
end

2 个答案:

答案 0 :(得分:1)

如果location不是当前文件夹,则glob返回的路径将包含dirname和basename:

Dir.glob('./*').select{ |f| File.basename(f) =~ /\A101(_\d+)?\z/ }.each do |f|
  puts f
  # do something with f
end

答案 1 :(得分:0)

你的问题不是特别清楚,但我猜你要匹配101后跟可选的下划线和数字的任何内容。如果是这样,请使用正则表达式^101_?\d$。如果您希望101后跟数字或下划线以及一个或多个数字,请使用^101(_\d+|\d)$

修改

正如OP在评论中提到的那样,101也应该匹配。更新的正则表达式为^101(?:_?\d)?$