2013-02-01 145 views
2

我有這種格式的營業時間一串字符串:12小時時間轉換爲24小時的時間用正則表達式

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

我可以只取出對付「AM」的一部分,但我想通過

  • 刪除「PM」
  • 前增加12數到PM轉換「:」
  • 考慮一個事實,即PM有時兩位數護理(如PM11:00)

字符串中可能有零個或多個PM時間。

我不知道如何操縱時間作爲一個數字。這一步我已經得到了:

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

它輸出這樣的事情:

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

的「\ u0001`可能是由於在字符串中的日文字符。

+3

這不是用單獨的正則表達式來完成的。你只能通過使用正則表達式來匹配,並提供替代函數來根據匹配的文本進行替換。 – nhahtdh

回答

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" 
+1

AM12:00和PM12:00怎麼樣? – maerics

+0

非常好,這個作品完美,謝謝! @maerics在我的情況下,至少,AM12:00可以保持原樣,並且沒有PM12:00,只有一個PM0:00(我將手動完成) –

相關問題