форматирование строк, удаление начальных символов - PullRequest
7 голосов
/ 16 сентября 2009

У меня есть строка, подобная этой: 00:11:40 или 00:02:40, как мне отформатировать, чтобы я всегда мог избавиться от начального нуля (ов) и двоеточия (ей), так что это выглядит так 11:40 или 2:40

Ответы [ 5 ]

21 голосов
/ 16 сентября 2009

Мы называем эти «ведущие» символы, а не трейлинг, так как они в начале, но регулярное выражение для этого очень просто

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

Это работает точно так, как вы это сформулировали: начиная с начала строки, удалите все 0 и: s.

3 голосов
/ 16 сентября 2009

Вы можете использовать что-то, как сказал Питер, но будет правильно:

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

Другой подход заключается в использовании метода разбиения:

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

Хотя я нахожу это еще более запутанным и сложным.

0 голосов
/ 08 декабря 2012

В большинстве случаев вы можете просто полагаться на базовые методы преобразования, например в ruby, если у вас была строка типа «05» и вы хотели, чтобы она была просто 5, вы просто делали бы «05» .to_i

0 голосов
/ 16 сентября 2009

Возможно, вы захотите попробовать регулярное регулярное выражение. Ницца ссылка

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 голосов
/ 16 сентября 2009

РЕДАКТИРОВАТЬ: ОП хотел это с самого начала:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...