You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails项目中如何用正则表达式从JSON提取日期时间?

从JSON中提取日期时间的Ruby正则表达式方案

嘿,我来帮你搞定这个问题!你现在用Ruby 2.5.0搭配Rails 5开发项目,要从给定的JSON里提取日期时间信息对吧?先看你提供的JSON数据,里面的WordText字段有类似0102770005、06...这类疑似日期的内容,咱们一步步来处理:

1. 先解析JSON数据

首先得把JSON字符串转换成Ruby能操作的对象,Rails默认已经包含了json库,直接用JSON.parse就行:

require 'json'

# 你的原始JSON字符串
json_content = '{ "Lines": [{ "Words": [{ "WordText": "WELCOME", "Left": 655, "Top": 442, "Height": 23, "Width": 91 }], "MaxHeight": 23, "MinTop": 442 }, { "Words": [{ "WordText": "0102770005", "Left": 752, "Top": 1621, "Height": 23, "Width": 131 }], "MaxHeight": 23, "MinTop": 1621 }, { "Words": [ { "WordText": "06..." }]}]}'

# 解析成Ruby哈希
parsed_data = JSON.parse(json_content)

2. 收集所有WordText内容

接下来要把所有Lines下的Words里的WordText都提取出来,方便后续匹配:

# 用flat_map+map嵌套遍历,收集所有WordText值
all_word_texts = parsed_data['Lines'].flat_map do |line|
  line['Words'].map { |word| word['WordText'] }
end

# 此时all_word_texts的结果是:["WELCOME", "0102770005", "06..."]

3. 用正则表达式匹配日期时间

根据你提供的示例内容,我们假设要匹配两种情况:

  • 类似DDMMYY的六位日期(比如010277对应1977年2月1日)
  • 截断的日期(比如06...,开头两位是日期的一部分)

可以写一个覆盖这两种情况的正则,然后筛选出匹配的内容:

# 定义匹配规则:要么是连续6位数字,要么是两位数字加省略号
date_regex = /\b(\d{6}|\d{2}\.\.\.)\b/

# 筛选出符合规则的文本
matched_dates = all_word_texts.select { |text| text.match?(date_regex) }

# 结果会是:["0102770005", "06..."]

如果只想要0102770005里的日期部分(前六位),可以调整正则来提取:

# 提取字符串中的六位日期片段
date_fragments = all_word_texts.flat_map do |text|
  text.scan(/\d{6}/)
end

# 结果会是:["010277"]

4. 把提取到的日期转换成日期对象

如果需要把字符串转成Ruby的Date或Time对象,方便后续处理,可以用Date.strptime(指定格式解析更精准):

require 'date'

date_fragments.each do |fragment|
  # 按照DDMMYY的格式解析
  parsed_date = Date.strptime(fragment, "%d%m%y")
  puts "解析后的日期:#{parsed_date}" # 输出:解析后的日期:1977-02-01
end

对于截断的06...,你可以根据业务规则补充处理逻辑,比如假设是当月的6号,或者结合其他上下文补全日期。

小提示

如果你的日期格式和上面的不一样(比如MMDDYY、YYYYMMDD等),只需要调整正则表达式和strptime的格式符就行。另外,Rails里也可以用Time.parse尝试自动解析,但正则匹配更适合这种OCR识别的结构化数据,避免误匹配无关文本。

内容的提问来源于stack exchange,提问作者awsm sid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:45:27