0

データフィードからの残り時間を表すさまざまな文字列があります。フォーマットは次のようになります。

  • 13:35
  • 01:36
  • 00:34

正規表現を使用してフォーマットを次のように変更したい:

  • 13:35 --> 13:35 (そのままでOK)
  • 01:36 --> 1:36 (先頭の 0 を削除)
  • 00:34 --> 0:34 (先頭の最初の 0 を削除)

現在、私はこれをやっています:

time_left.gsub(/\A0+/, '')

最初の 2 つのターゲット形式を達成しますが、3 番目の形式は達成しません。その結果、次のようになります。

:34 (本来は 0:34)

4

5 に答える 5

1

正規表現は先頭の 0 をすべて/\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

それぞれの時間が別々の文字列にあり、正規表現を個別に適用している場合は、次を使用しないでくださいgsub

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

むしろ、すべての時間が1つの文字列に含まれている場合は、を使用できません\A

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

2つ目も、コロンの後のゼロを削除します。

于 2013-02-22T05:27:59.200 に答える
0

否定的な先読みを使用するのはどうですか:

/\A0+(?!:)/

(Perlでテスト済み)

于 2013-02-27T15:57:10.637 に答える
0

1以上を意味する+を外してください。したがって、ゼロが 2 つある場合はゼロが 2 つ必要です。

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