我有一个这样的字符串:00:11:40或00:02:40我如何格式化,以便我总能摆脱前导零和冒号,所以它看起来像这样 11:40或2:40
答案 0 :(得分:21)
我们将这些“领先”字符称为“领先”字符,而不是尾随字符,因为它们位于开头,但正则表达式很容易
x.sub(/^[0:]*/,"")
这与你的措辞完全一样:从字符串的开头开始,删除所有的0和:s。
答案 1 :(得分:3)
你可以使用彼得所说的东西,但是会正确地说:
s = "00:11:40"
s = s[3..-1] # 11:40
另一种方法是使用拆分方法:
s = "00:11:40".split(":")[1,2].join(":")
虽然我发现一个更令人困惑和复杂。
答案 2 :(得分:0)
编辑:OP从一开始就想要这个:
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
答案 3 :(得分:0)
你可能想尝试积极的后视正则表达式。 不错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
端
答案 4 :(得分:0)
很多时候你可以简单地依赖基本的转换技术,例如,如果你有一个类似“05”的字符串,并希望它只是5,你只需要做“05”.to_i < / p>