Hommer Smith
Hommer Smith

Reputation: 27852

Parsing date in string

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

Answers (4)

Cary Swoveland
Cary Swoveland

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

Arup Rakshit
Arup Rakshit

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

falsetru
falsetru

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

sawa
sawa

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

Related Questions