2013-02-01 149 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(我将手动完成) –

相关问题