使用正则表达式对文件名进行排序

时间:2014-09-25 15:38:03

标签: ruby regex sorting

我有一个包含200个文件(.txt)的目录,我希望在文件名的某个部分使用正则表达式对它们进行排序。

示例文件名是:

W:/name/2014-09-02 - name/20140902-070343_1-P4.txt
W:/name/2014-09-02 - name/20140902-070343_10-P4.txt
W:/name/2014-09-02 - name/20140902-070343_2-P4.txt
W:/name/2014-09-02 - name/20140902-070343_200-P4.txt

数组中的格式相同。

下面的代码会将文件名存储在一个数组中。我之后想要在文件名的_1_200_10 _2部分使用正则表达式进行排序。

require 'FileUtils'
contents = Dir.glob("W:/name/2014-09-02 - name/*.txt").select { |f| f.include?('P4')}.sort_by! {|s|  s[/(\D\d+)-P4.txt/]}
puts contents

通过以上代码,我得到了:

_1
_10
_100
_101
_102
.
.
.
_11
_111

当我想要的是:

_1
_2
_3
_4
_5
.
.
.
_10
_11

最终,我想循环遍历数组以确认递增值是连续的(1 - 200)。

1 个答案:

答案 0 :(得分:2)

[
  "W:/name/2014-09-02 - name/20140902-070343_1-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_10-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_2-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_200-P4.txt",
]
.sort_by{|s| s[/(?<=_)\d+/].to_i}

结果

[
  "W:/name/2014-09-02 - name/20140902-070343_1-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_2-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_10-P4.txt",
  "W:/name/2014-09-02 - name/20140902-070343_200-P4.txt"
]