我有各种字符串表示从数据馈送中剩余的时间。格式如下所示:
- 13:35
- 01:36
- 00:34
我想使用正则表达式将格式更改为:
- 13:35 --> 13:35(按原样正常)
- 01:36 --> 1:36(删除前导 0)
- 00:34 --> 0:34(删除第一个前导 0)
目前,我正在这样做:
time_left.gsub(/\A0+/, '')
完成前两种目标格式,但未完成第三种,这会导致:
:34(应该是 0:34)
您的正则表达式/\A0+/
删除了所有前导 0,但听起来您只想删除第一个。你只是想要/\A0/
。
正则表达式不是最好的选择。我会追求这个,......呃,这个:
puts %w[
13:35
01:36
00:34
].map { |s|
"%0d:%0d" % s.split(':').map(&:to_i)
}
哪个输出:
13:35 1:36 0:34
只需取出表示 1 或更多的 +。因此,如果它有两个零,它将需要两个零。
time_left.gsub(/\A0/, '')
如果每个时间都在一个单独的字符串中,并且您将正则表达式单独应用于它们,那么,您不应该使用gsub
:
time_left.sub(/\A0/, "")
如果是所有时间都在一个字符串中的情况,那么您不能使用\A
.
time_left.gsub(/(?!<\d)0/, "")
第二个也将删除冒号后的零。
如何使用负前瞻:
/\A0+(?!:)/
(在 Perl 中测试)