2012-07-05 3 views
2

문자열과 같은 루비가 있습니다.문자열 값에서 날짜를 찾아 추출하는 방법

mystring = "some string value with a date 02/02/2002" 

저는 데이터베이스에 저장하기 위해 날짜 만 추출하고 싶습니다. 패턴에 대한 검색과 문자열에서 그걸 잡아내는 일종의 정규식과 방법이 필요하다고 확신합니다.

여기에서해야 할 일이 확실하지 않습니다.

나는이 날짜 형식과 일치시킬 수있는 온라인 Regex를 찾았습니다.

reg = Regexp.new("^\d{1,2}\/\d{1,2}\/\d{4}$") 

위의 날짜를 문자열에서 파싱하려면 어떻게해야합니까?

답변

9

어때? 당신은 전체 문자열을 일치하지 않습니다 당신이 당신의 정규식에 ^$ 필요하지 않습니다

s = "some string value with a date 02/02/2002" 
regex = /\d{1,2}\/\d{1,2}\/\d{4}/ 

s[regex] # => "02/02/2002" 

참고.

11

일종의 쿨 :

1.9.2-p290 :005 > "some string value with a date 02/02/2002".to_date 
=> Sat, 02 Feb 2002 
1.9.2-p290 :013 > "some another string 05/07/2012 with stuff after".to_date 
=> Thu, 05 Jul 2012 

그리고 그것과 동급 날짜이기 때문에 당신이 원하는 무엇이든 할.

(나는 정규식 아니에요 알고,하지만 난 여전히 멋진 생각; P)

+0

그래, 흥미,하지만 난 그것에 의존하지 것이다 :) –

+6

'요구 "날짜"; Date.parse (mystring)'은 비 레일에 해당합니다. – steenslag

+0

@SergioTulentsev 나는 그것이 우리가 가지고있는 투입물에 달려 있다고 생각한다. 날짜가 하나 인 문자열 만 알면 좋습니다. regexp를 통해 많은 날짜를 일치시키고 싶다면 그다지 그렇지 않다. –

0

당신은 https://rubygems.org/gems/dates_from_string 시도 할 수 있습니다 :

text = "1988-1990 and 2000 and one more date 28.04.2015" 
dates_from_string = DatesFromString.new() 
dates_from_string.get_structure(text) 

#=> returns 
# [{:type=>:year, :value=>"1988", :distance=>0, :key_words=>[]}, 
# {:type=>:year, :value=>"1990", :distance=>2, :key_words=>[]}, 
# {:type=>:year, :value=>"2000", :distance=>5, :key_words=>[]}, 
# {:type=>:year, :value=>"2015", :distance=>0, :key_words=>[]}, 
# {:type=>:month, :value=>"04", :distance=>0, :key_words=>[]}, 
# {:type=>:day, :value=>"28", :distance=>0, :key_words=>[]}] 
관련 문제