2014-09-25 119 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