2009-09-16 18 views

Antwort

21

wir diese "führenden" Zeichen nennen, nicht schleppen, da sie am Anfang ist, aber die Regex dafür ist sehr einfach

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

Das funktioniert genau so, wie Sie es formulierten: starti ng am Anfang der Zeichenfolge, entfernen Sie alle 0 und: s.

+1

Einige von uns sind nur bescheidene Studenten der Regex, andere sind nur Meister (Sie haben sich von mir erhoben). Das passiert bei TDD um 2200 Uhr. Refactoring bleibt als Übung übrig. – Gutzofter

+1

'" 00:00:23 "ergibt' '23' 'was seltsam erscheint. Aber nichts für ungut, das ist immer noch genau das, was das OP angefordert hat. –

0

EDIT sieht: die OP wollte dies von Anfang an:

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

oder man strftime für mehr Formatierungsoptionen sehen.

EDIT: einschließlich der gesamten Diskussion, hier ist der empfohlene Ansatz. Es beseitigt auch die Notwendigkeit für den Zeitanruf.

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

Danke, aber ich brauche einen allgemeinen Weg, dies zu tun. Ich bekomme den String durch eine Umwandlung von Sekunden Time.at (seconds.to_i) .gmtime.strftime ('% R:% S') –

+0

Schließen! Ich muss herausfinden, wie man "gsub" mit einigen Regex verwendet, um die führenden Nullen und/oder Doppelpunkte zu entfernen –

2

Sie so etwas wie Peter sagte verwenden können, aber richtig wäre:

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

Ein anderer Ansatz wäre, die Split-Methode zu verwenden:

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

Obwohl ich, dass man mehr finden verwirrend und komplex.

0

Vielleicht möchten Sie einen positiven Look-Behind-Regex ausprobieren. Nizza 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" 

Ende

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 

Ende

+0

Keine Notwendigkeit für vier verschiedene regexes und 15 Zeilen Code, um dies zu tun! Eine einzelne .sub (/^[0:] * /, "") funktioniert einwandfrei! –

0

Viele Male können Sie sich einfach auf grundlegende Umwandlungstechniken verlassen, in Ruby zum Beispiel, wenn Sie eine Schnur wie "05" hatten und es nur 5 sein wollten, würden Sie einfach "05" .to_i tun