Reputation: 27852
I have strings that look like this:
Available. Released 2013, November
And I am looking for a way to fetch: Year, Month
I have this regex so far:
/Released \b\d{4}\b,\s?/.match('Released 2013, ')
But I am failing to see how would I grab the month?
Upvotes: 0
Views: 68
Reputation: 110675
If the year and month are always the last two words of the line, as in
s = 'Available. Released 2013, November'
then
s.split.last(2).join(' ') #=> "2013, November"
would be enough.
Upvotes: 1
Reputation: 118261
I'd do using CSV::parse
:
require 'csv'
text = <<EOS
Available. Released 2013, November
Available. Released 2012, October
EOS
ary = CSV.parse(text,:col_sep => " ").map do |a|
a.last(2).join(" ")
end
ary # => ["2013, November", "2012, October"]
Upvotes: 1
Reputation: 368944
Using String#scan
and capturing group:
text = <<EOS
Available. Released 2013, November
Available. Released 2012, October
EOS
text.scan(/Released\s+(\d{4},\s*[A-Z][a-z]+)/)
# => [["2013, November"], ["2012, October"]]
text.scan(/Released\s+(\d{4}),\s*([A-Z][a-z]+)/)
# => [["2013", "November"], ["2012", "October"]]
UPDATE
If you want only the first match, use String#[]
:
text[/Released\s+\d{4},\s*[A-Z][a-z]+/]
# => "Released 2013, November"
text[/Released\s+(\d{4},\s*[A-Z][a-z]+)/, 1]
# => "2013, November"
Upvotes: 0
Reputation: 168081
s = <<_
Available. Released 2013, November
Available. Released 2012, October
_
s.each_line.map{|s| s.split("Released").last.strip}
# => ["2013, November", "2012, October"]
"Available. Released 2013, November".split("Released ").last
# => "2013, November"
Upvotes: 1