使用Cary提供的正則表達式(謝謝!)後,我意識到當我在IRB中運行它時,它將刪除字符串中的最後一個日期。這裏是代碼和輸出。誰能告訴我爲什麼發生這種情況,以及如何解決它?正則表達式刪除字符串中的最後一個字符
require 'rubygems'
require 'nokogiri'
require 'open-uri'
str = "September 19, 20, 25, 26, October 2, 3, 4, 10, November 3, 12, 17"
dates=str.scan(/\D+(?:\d+,\s+)+/).map { |s| [ s[/[a-z]+/i], s.scan(/\d+/) ] }
p dates
輸出如下。如您所見,11月只返回2個日期,但字符串中有3個日期。它降到11月17日
[["September", ["19", "20", "25", "26"]], ["October", ["2", "3", "4", "10"]], ["November", ["3", "12"]]]
C:\ RailsInstaller \ Ruby1.9.3 \引入nokogiri> -
我修正了我的錯誤[原始答案](http://stackoverflow.com/questions/26086602/can-anyone-help-me-dry-this-regex/26087594#comment43610779_26087594),也改變了方法,我認爲更好。它現在是'str.scan(/ [A-Z] [a-z] + | \ d + /)。each_with_object([]){| e,b | e [0] [/ [A-Z] /]? b << [e,[]]:b.last.last << e}'。 –