2

この形式の営業時間の文字列がたくさんあります。

Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM6:00

「AM」の部分は削除するだけで対応できますが、PMは

  • 「PM」を削除
  • 「:」の前の数字に12を足す
  • PM が 2 桁になる場合があることに注意する (例: PM11:00)

文字列には 0 個以上の PM 時刻を含めることができます。

時間を数値として操作する方法がわかりません。私はここまで来ました:

opening_hours.sub! /PM([\d]?[\d]):/, "***\1***"

次のようなものを出力します:

AM7:15-***\u0001***00

'\u0001` は、文字列内の日本語の文字が原因である可能性があります。

4

2 に答える 2

4

String#gsubがブロックを受け入れるという事実を利用できます。このような何かがあなたのために行いますか?

s = "Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM11:00"

s2 = s.gsub('AM', '').gsub(/PM(\d+)/) do |match|
  (match.gsub('PM', '').to_i + 12).to_s
end

s2 # => "Mon-Fri: 7:00-20:00\nSat-Sun: 8:00-23:00"
于 2013-02-01T17:52:11.273 に答える