字符串格式化,删除前导字符

时间:2009-09-16 03:23:11

标签: ruby

我有一个这样的字符串:00:11:40或00:02:40我如何格式化,以便我总能摆脱前导零和冒号,所以它看起来像这样 11:40或2:40

5 个答案:

答案 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了解更多格式选项。

编辑:结合所有讨论,这是推荐的方法。它也不需要Time调用。

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>