Ruby 使用正则表达式对文件名排序
我有一个包含200个.txt文件的目录,我希望在文件名的某个部分使用正则表达式对它们进行排序 示例文件名包括:Ruby 使用正则表达式对文件名排序,ruby,regex,sorting,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-07034
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。将数字部分转换为实际数字。如预期的那样,你能提供一些关于什么的信息吗[/?它是否忽略了之前的任何内容??
[
"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"
]