0

我有各种字符串表示从数据馈送中剩余的时间。格式如下所示:

  • 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)

4

5 回答 5

1

您的正则表达式/\A0+/删除了所有前导 0,但听起来您只想删除第一个。你只是想要/\A0/

于 2013-02-22T03:31:05.670 回答
1

正则表达式不是最好的选择。我会追求这个,......呃,这个:

puts %w[
  13:35
  01:36
  00:34
].map { |s|
  "%0d:%0d" % s.split(':').map(&:to_i)
}

哪个输出:

13:35
1:36
0:34
于 2013-02-22T04:37:49.977 回答
0

只需取出表示 1 或更多的 +。因此,如果它有两个零,它将需要两个零。

time_left.gsub(/\A0/, '')
于 2013-02-22T03:30:59.683 回答
0

如果每个时间都在一个单独的字符串中,并且您将正则表达式单独应用于它们,那么,您不应该使用gsub

time_left.sub(/\A0/, "")

如果是所有时间都在一个字符串中的情况,那么您不能使用\A.

time_left.gsub(/(?!<\d)0/, "")

第二个也将删除冒号后的零。

于 2013-02-22T05:27:59.200 回答
0

如何使用负前瞻:

/\A0+(?!:)/

(在 Perl 中测试)

于 2013-02-27T15:57:10.637 回答