Mam ciąg znaków takich jak: 00:11:40 lub 00:02:40 w jaki sposób sformatowany, aby zawsze mogę pozbyć się wiodącego zera (ów) i dwukropka (-ów) , więc wygląda to tak 11:40 lub 2:40formatowanie napisów, usuwanie znaków wiodących
Odpowiedz
nazywamy te "wiodące" znaków, nie spływu, ponieważ są one na początku, ale regex tego jest bardzo łatwe
x.sub(/^[0:]*/,"")
Działa dokładnie tak, jak to sformułowałeś: starti ng na początku łańcucha, usuń wszystkie 0 i: s.
EDIT: pO chciała to od początku:
seconds = 11*60+40
Time.at(seconds.to_i).gmtime.strftime('%M:%S') # gives '11:40'
lub zobaczyć man strftime
więcej opcji formatowania.
EDYCJA: włączenie całej dyskusji, oto zalecane podejście. Usuwa również potrzebę wywoływania w czasie.
seconds = seconds.to_i
if seconds >= 60
"#{seconds/60}:#{seconds%60}"
else
"#{seconds}"
end
Dzięki, ale potrzebuję ogólnego sposobu robienia tego. Otrzymuję ciąg znaków przez konwersję z sekund Time.at (seconds.to_i) .gmtime.strftime ('% R:% S') –
Zamknij! Muszę wymyślić, jak użyć "gsub" z pewnym wyrażeniem regularnym, aby usunąć początkowe zera i/lub dwukropki. –
można użyć coś jak Piotr powiedział, ale właściwie to:
s = "00:11:40"
s = s[3..-1] # 11:40
Innym rozwiązaniem byłoby użyć metody podziału:
s = "00:11:40".split(":")[1,2].join(":")
Chociaż uważam, że jeden więcej mylące i złożone.
Możesz chcieć wypróbować pozytywne wyrażenie za regex. Nicea 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"
koniec
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
koniec
Nie ma potrzeby używania czterech różnych wyrażeń regularnych i 15 linii kodu! Pojedynczy .sub (/^[0:] * /, "") działa dobrze! –
Wiele razy można po prostu polegać na podstawowych technikach konwersji, na przykład w rubinach, jeśli masz ciąg znaków taki jak "05" i chcesz mieć tylko 5, po prostu wykonaj "05" .to_i
- 1. Usuwanie zer wiodących od znaków alfanumerycznych w R
- 2. Usuwanie wszystkich nieliczbowych znaków z napisów w języku Python
- 3. Zastępowanie wiodących znaków w ciągu znaków
- 4. Formatowanie napisów w Pythonie zbyt wolne
- 5. Dodawanie zer wiodących w ciągu znaków
- 6. Usuwanie znaków z ciągu znaków
- 7. Formatowanie ciągu znaków na 10 znaków
- 8. Przycinanie wiodących/końcowych białych znaków z textarea za pomocą jQuery?
- 9. Usuwanie modyfikatorów znaków Unicode
- 10. Usuwanie wszystkich znaków białych znaków z wyjątkiem „”
- 11. Usuwanie znaków niealfanumerycznych z ciągu znaków
- 12. Usuwanie wielu typów znaków z ciągu znaków
- 13. Usuwanie białych znaków w ciągu znaków
- 14. Usuwanie białych znaków w ciągu znaków XML
- 15. Usuwanie zduplikowanych znaków z ciągu znaków
- 16. Usuwanie określonych znaków z ciągu znaków
- 17. tokenizer napisów w Javie
- 18. Usuwanie spacji z ciągu znaków
- 19. Usuwanie znaków za pomocą przycisku
- 20. Usuwanie znaków niedrukowalnych C# wielojęzyczny
- 21. Usuwanie znaków NUL z bajtów
- 22. bardziej efektywny sposób na zbieranie napisów
- 23. Usuwanie pewnych znaków z ciągu znaków w R
- 24. C++ Usuwanie znaków z ciągu znaków za pomocą STL
- 25. Usuwanie wszystkich białych znaków z ciągu znaków w Ruby
- 26. Usuwanie znaków sterujących (\ n \ r \ t) z ciągu znaków
- 27. wprowadzenie napisów do TMemoryStream
- 28. Ustawianie SupportActionBar napisów multilinii
- 29. Toolbar napisów nie pojawiają
- 30. Pasek napisów() dla JavaScript?
Niektórzy z nas są po prostu skromnymi studentami regexu, inni to tylko mistrzowie (macie mnie ode mnie). Tak się dzieje, gdy ty TDD o 2200 godzin. Refaktoryzacja jest pozostawiona jako ćwiczenie. – Gutzofter
'" 00:00:23 "' powoduje "23", co wydaje się dziwne. Ale bez obrazy, to jest dokładnie to, o co prosił PO. –