我有一个包含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)。
答案 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"
]