Ruby on rails Ruby正则表达式提取参数

Ruby on rails Ruby正则表达式提取参数,ruby-on-rails,regex,date,format,Ruby On Rails,Regex,Date,Format,我有一个这样的日期 11/28/2011 2:39:00 PM 我似乎找不到一种方法来分别从这种格式中提取每个元素(如外卖日、月、年、小时、分钟、秒、上午/下午)来处理它们。我需要这里的帮助,所以我可以使用它来手动重新安排时间,并以我想要的方式使用它。我找不到解决这个问题的办法。(但我很确定我需要使用正则表达式)您不必用正则表达式解析它,只需将其转换为DateTime: require 'date' my_time = DateTime.parse('11/28/2011 2:39:00 PM

我有一个这样的日期

11/28/2011 2:39:00 PM

我似乎找不到一种方法来分别从这种格式中提取每个元素(如外卖日、月、年、小时、分钟、秒、上午/下午)来处理它们。我需要这里的帮助,所以我可以使用它来手动重新安排时间,并以我想要的方式使用它。我找不到解决这个问题的办法。(但我很确定我需要使用正则表达式)

您不必用正则表达式解析它,只需将其转换为DateTime:

require 'date'
my_time = DateTime.parse('11/28/2011 2:39:00 PM')
puts my_time.day  # and so on

您可以使用DateTime.strTime创建DateTime对象并使用它。

我发现使用Chrome gem进行此类解析最简单。Chronic比默认的DateTime更好地处理这些问题:

require 'date'
str = '11/28/2011 2:39:00 PM'
date = DateTime.strptime(str, '%m/%d/%Y %I:%M:%S %p')
puts date.year # etc
gem install chronic
然后:

require 'chronic'
date = Chronic.parse(my_date)
puts "year, month, day, hour: #{date.year}, #{date.month}, #{date.day}, #{date.hour}"

等等。

虽然我确信正则表达式不是最好的方法,但这里有一些我测试过的正则表达式

月份:

(\d){2}(?=\/\d\d\/) 
日期:

年份:

时间:

分钟:

(\d){2}(?=:\d\d\s)
第二:

(\d){2}(?=\s\w\w\b)
上午/下午:

\b[PA]M\b

您可以使用这个朴素的正则表达式:

/(\d+)/(\d+)/(\d+)\s(\d+):(\d+):(\d+)\s(\w+)/

如果你的格式从未改变过,甚至根本没有改变过……

你自己做过什么吗?发布您尝试过的内容和不起作用的内容可能会有所帮助。“有些人在遇到问题时会认为‘我知道,我会使用正则表达式’。现在他们有两个问题。”-Jamie ZawinskiI通常不喜欢日期解析试探法,要么确保我的区域设置定义良好,要么明确指定格式,因为我不知道2011年11月12日会发生什么。事实上,我希望每个人都能接受日本和UTC的做事方式——就我们的数字系统的工作方式而言,把年份放在最后是完全不合逻辑的。如果不是愚蠢的美国人和他们的mm/dd/yyyy:)@Amadan,我同意,但当你试图解释用户输入时,解析是有价值的,并且不想强迫他们使用首选格式。这就是慢性病的闪光点。我明白了——它真的很酷。我只是害怕这样的情况:一个月的第二天,然后使用日期时间。strtime有什么特别的原因导致这些看起来像头?也许没有!我仍在试图找出正则表达式。这可能是吹毛求疵,但下午2:39:00到00:00:00+0000,这不是很好。就我而言,我只需要一天内的准确度,所以这很好,但我不能说你的答案是正确的,我可能会说长期的答案是。。。给你修好了。我使用了
Date
类而不是
DateTime
。但是你说你想要一个“约会”,所以我想
date
可能更正确。很好,对不起,我必须选择bodoz的答案,因为他的答案解决了问题的方式(但我会在我的应用程序中使用你的)
(\d){2}(?=\s\w\w\b)
\b[PA]M\b
/(\d+)/(\d+)/(\d+)\s(\d+):(\d+):(\d+)\s(\w+)/