Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用正则表达式将12小时时间转换为24小时时间_Ruby_Regex_String_Time - Fatal编程技术网

Ruby 使用正则表达式将12小时时间转换为24小时时间

Ruby 使用正则表达式将12小时时间转换为24小时时间,ruby,regex,string,time,Ruby,Regex,String,Time,我有一组字符串,以这种格式显示开放时间: Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM6:00 我可以通过移除“AM”部分来处理它,但是我想通过 删除“PM” 将12添加到“:”之前的数字 注意PM有时为两位数(例如PM11:00) 字符串中可以有零个或多个PM时间 我不知道如何把时间作为一个数字来处理。我已经走了这么远: opening_hours.sub! /PM([\d]?[\d]):/, "***\1***" 输出如下内容: AM7:15-

我有一组字符串,以这种格式显示开放时间:

Mon-Fri: AM7:00-PM8:00\nSat-Sun: AM8:00-PM6:00
我可以通过移除“AM”部分来处理它,但是我想通过

  • 删除“PM”
  • 将12添加到“:”之前的数字
  • 注意PM有时为两位数(例如PM11:00)
字符串中可以有零个或多个PM时间

我不知道如何把时间作为一个数字来处理。我已经走了这么远:

opening_hours.sub! /PM([\d]?[\d]):/, "***\1***"
输出如下内容:

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

“\u0001”可能是由于字符串中的日文字符造成的。

您可以利用
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"

看看这个问题,ruby有一个叫做datatime的类


这不能单独使用正则表达式。您只能使用regex进行匹配,并提供替换功能以根据匹配的文本进行替换。那么
AM12:00
PM12:00
呢?非常好,这非常有效,谢谢@maerics至少在我的情况下,AM12:00可以保持原样,没有PM12:00,只有一个PM0:00(我会手工完成)