我有来自第三方的一些时间(多么富有诗意),有些人拥有时区,而其他人却没有。如果没有时区,我想做的是附加一个时区。
以下是带时区的字符串示例...
5:21 AM MT
10:01 PM MT
8:41 PM MT
但有时候MT
因任何原因而遗失。
所以,我需要做的是在MT
之后追加AM
或PM
如果它丢失了。
(注意,我不能只检查MT
。它可以是任何时区。这里的主要目标是能够追加我在AM
或{之后选择的任何时区{1}})。
答案 0 :(得分:4)
我不喜欢其中任何一个,所以如果它存在,我决定只关闭chomp
然后再添加它。在你的情况下:
"#{time.chomp(' MT')} MT"
编辑:这实际上不适用于OP编辑的用例(许多不同的时区),但 对原始用例以及可能从Google发现此问题的人都有用(就像我一样!)
答案 1 :(得分:2)
如果AM / PM指示符始终存在,我可能只是检查字符串的结尾,然后在必要时附加:
if string.match(/\ (A|P)M$/)
string << " #{timezone}"
end
如果不是(即:24次),最好通过Date
或Time
解析器解析字符串,并在将字符串强制转换为适当的对象后附加时区。
答案 2 :(得分:1)
>> s = 'foobar'
>> s.ends_with?('bar') ? s : "#{s}bar"
=> "foobar"
>> s = 'foo'
>> s.ends_with?('bar') ? s : "#{s}bar"
=> "foobar"
答案 3 :(得分:0)
非正则表达式解决方案:
strings = ['5:21 AM MT', '8:41 PM MT', '8:41 AM']
timezone = ' MT'
p strings.map{|time| time.end_with?('AM', 'PM') ? time+timezone : time}
#=> ["5:21 AM MT", "8:41 PM MT", "8:41 AM MT"]
答案 4 :(得分:0)
借用Perl的日子:
str = '5:21 AM MT'
str # => "5:21 AM MT"
str[/[AP]M$/] # => nil
str[/[AP]M$/] && str << ' MT'
str # => "5:21 AM MT"
str = '5:21 AM'
str # => "5:21 AM"
str[/[AP]M$/] # => "AM"
str[/[AP]M$/] && str << ' MT'
str # => "5:21 AM MT"
你问它怎么样? str[/[AP]M$/] && str << ' MT'
是神奇的东西。查看str[/[AP]M$/]
行的结果:
"AM"
或"PM"
结尾,则返回nil
,这在Ruby中为false,导致&&
条件缩短电路。"AM"
或"PM"
结尾,则Ruby返回匹配的字符串,如第二个示例所示,触发&&
(和)并附加' MT'
。 答案 5 :(得分:-1)
time_string.sub(/([AP]M){1}$/, '\1 MT')
答案 6 :(得分:-2)
因此,如果字符串包含AM
或PM
后面没有空格和一串以T
结尾的大写字母,请在{MT
之后追加AM
1}}或PM
?
timezone_string.sub(/( [AP]M)(?! [A-Z]+T)/,'\1 MT')