2014-09-25 52 views
-1

我有一个包含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,部分文件名的正则表达式进行排序。

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

转换的数字部分到实际数目。 – 2014-09-25 15:45:36

回答

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" 
] 
+0

按预期工作,你能提供关于[/(?<= _)\ d + /正在做什么的一些信息吗? – user3927287 2014-09-25 15:59:55

+0

在_之前忽略了什么? – user3927287 2014-09-25 16:11:53

+0

是的。它是。 .................. – sawa 2014-09-25 16:36:03