Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用正则表达式对文件名排序_Ruby_Regex_Sorting - Fatal编程技术网

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

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

我有一个包含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。

将数字部分转换为实际数字。如预期的那样,你能提供一些关于什么的信息吗[/?它是否忽略了之前的任何内容??
[
  "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"
]