ruby-on-rails - 如何从 Rails 中的字符串中识别一组日期

标签 ruby-on-rails ruby regex string gem

我有以下字符串

"sep 04 apr 06"
"29th may 1982"
"may 2006 may 2008"
"since oct 11"

输出

"September 2004 and April 2006"
"29 May 1982"
"May 2006 and May 2008"
"October 2011"

有没有办法从这些字符串中获取日期。我使用了 gem 'dates_from_string',但它无法从第一个场景中正确获取日期。

最佳答案

当您说“不幸的是我无法预测日期将采用哪种格式。”时,您暗示您实际上需要“自然语言解析”。这是核心 Date 或 DateTime 对象不能也不应该做的事情。

因此,要么您需要解析字符串,以便以可理解的格式将它们呈现给更严格的解析器。像 DateTime.parse('sep 04')。对于您的示例,它可以很简单:

datestring = 'sep 04 apr 06'
matches = datestring.match(/[a-z]{3}\s\d{2,4}/)
if matches.many?
  matches.map{|m| Date.parse(m) }.join(' and ')
else
  Date.parse(datestring)
end

但是,如果您想要真正的自然语言解析,请查看 Chronic .其中有各种奇特的解析器,例如 Chronic.parse('summer')

编辑:仔细观察,Chronic 似乎也只能识别一个字符串,因此您的示例 'sep 04 apr 06' 仍需要一些预处理。

关于ruby-on-rails - 如何从 Rails 中的字符串中识别一组日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30073343/

相关文章:

javascript - QML 中文本字段验证器的正则表达式

javascript - 数字的正则表达式仅在 1-24 之间并且还允许小数

ruby-on-rails - 在 mongoid 中查询包含哈希的数组字段

ios - 如何在 iOS 设备上使用 appium 自动化不是我的应用程序

ruby - 帮助 Ruby Koans #6 - 捕获了什么异常?

ruby-on-rails - Rails 依赖 : :destroy causes ArgumentError

php - 正则表达式匹配golang sql dsn

ruby-on-rails - .join/has_one 的 ActiveRecord .where :through

ruby-on-rails - 错误 "uninitialized constant AWS (NameError)"

ruby-on-rails - 使用 RSpec 测试 Controller 中的渲染方法