2009-09-16 5 views
7

다음과 같은 문자열이 있습니다 : 00:11:40 또는 00:02:40 어떻게하면 항상 앞에 오는 0과 콜론을 제거 할 수 있도록 형식화합니까? 그것은이 11시 40분 또는 2시 40분문자열 형식화, 선행 문자 제거

답변

21

x.sub(/^[0:]*/,"") 

정확하게 표현한대로 작동합니다. starti 문자열의 시작 부분에 모든 0과 : s를 제거하십시오.

+1

우리 중 일부는 단지 정규 표현식의 겸손한 학생이고, 다른 사람들은 그냥 주인입니다 (나와 나에게서 일어났습니다). 그게 22시에 TDD 때 일어난 일입니다. 리팩토링은 연습으로 남아 있습니다. – Gutzofter

+1

''00:00:23 "'은 이상하게 보이는''23"'이됩니다. 그러나 불쾌감은 없지만 이것은 여전히 ​​OP가 요청한 것입니다. –

0

EDIT처럼 보인다 있도록, 상기 영업 이익은 처음부터이 원 :

seconds = 11*60+40 
Time.at(seconds.to_i).gmtime.strftime('%M:%S') # gives '11:40' 

이상의 서식 옵션에 대한 man strftime을 참조하십시오.

편집 : 모든 토론을 통합하여 다음 권장 방법을 사용하십시오. 그것은 시간 호출의 필요성을 제거합니다.

seconds = seconds.to_i 
if seconds >= 60 
    "#{seconds/60}:#{seconds%60}" 
else 
    "#{seconds}" 
end 
+0

감사합니다. 그러나이 작업을 수행하는 일반적인 방법이 필요합니다. 초 단위에서 변환을 통해 문자열을 가져옵니다. time.at (초 .to_i) .gmtime.strftime ('% R : % S') –

+0

닫기! 내가 어떻게 "gsub"를 사용하여 몇 가지 정규식을 맨 앞에 0 및/또는 콜론을 제거하는 방법을 그림해야합니다 –

2

당신은 베드로가 말한 것처럼 뭔가를 사용할 수 있지만, 제대로 될 것이다 :

s = "00:11:40" 
s = s[3..-1] # 11:40 

또 다른 방법은 분할 방법을 사용하는 것입니다 : 나는 것을 발견했지만

s = "00:11:40".split(":")[1,2].join(":") 

을 한 번 더 혼란스럽고 복잡한.

0

긍정적 인 look-behind regex를 시도해보십시오. 니스 reference

it "should look-behind for zeros" do 
time = remove_behind_zeroes("ta:da:na") 
time.should be_nil 

time = remove_behind_zeroes("22:43:20") 
time.should == "22:43:20" 

time = remove_behind_zeroes("00:12:30") 
time.should == "12:30" 

time = remove_behind_zeroes("00:11:40") 
time.should == "11:40" 

time = remove_behind_zeroes("00:02:40") 
time.should == "2:40" 

time = remove_behind_zeroes("00:00:26") 
time.should == "26" 

def remove_behind_zeroes(value) 
exp = /(?<=00:00:)\d\d/ 
match = exp.match(value) 
if match then return match[0] end 

exp = /(?<=00:0)\d:\d\d/ 
match = exp.match(value) 
if match then return match[0] end 

exp = /(?<=00:)\d\d:\d\d/ 
match = exp.match(value) 
if match then return match[0] end 

exp = /\d\d:\d\d:\d\d/ 
match = exp.match(value) 
if match then return match[0] end 
nil 

끝에 그들은 처음에,하지만 이것에 대한 정규식은 매우 간단하기 때문에 우리는이 "선도"문자 후행하지 호출

+0

네 가지 정규식과 코드 15 라인에 대한 필요가 없습니다! 하나의 .sub (/^[0 :] * /, "")은 잘 작동합니다! –

0

예를 들어 루비에서 "05"와 같은 문자열이 있고 그냥 5가 되길 원한다면 기본 변환 기술에 의존 할 수 있습니다. "05".to_i