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

RoR项目中基于指定关键词提取字符串对应两行的实现问询

嘿,针对你在Ruby on Rails项目里要根据关键词提取对应两行文本的需求,我给你整理了一套实用的实现方案,咱们一步步来:

第一步:先把文本按行拆分

首先得把你的ParsedText字符串按换行符分割成单独的行数组,这样方便我们定位关键词所在的位置。比如假设你的文本存在parsed_text变量里:

# 模拟你的ParsedText内容
parsed_text = <<~TEXT
SUPA IGA WATERFORD 
Cnr Manning g Kent St 
Karawara WA 6152 
Pin: 08 9200 4211 Fax: oe 9200 4212 
lax Invoice 
138 932 466 
12/04/2018 PM 
Scot User 12 
AUSSIE NAT SPROG WATER 1.5L $0.99 
TOTAL 
Master 
You saved: $0.08
TEXT

# 分割成行数组,同时去除每行前后的空白(可选,根据你的实际需求调整)
lines = parsed_text.split("\n").map(&:strip)

第二步:定位关键词所在的行

接下来找到包含目标关键词(比如6152)的行的索引:

keyword = "6152"
target_index = lines.find_index { |line| line.include?(keyword) }

第三步:提取对应的两行

以你的示例来说,关键词6152在第三行,我猜你要的是包含关键词的行 + 它的下一行,代码实现如下:

extracted_lines = []
if target_index
  # 处理关键词在最后一行的情况,避免索引越界
  if target_index < lines.length - 1
    extracted_lines = lines[target_index..target_index + 1]
  else
    # 如果关键词在最后一行,只提取当前行(或者根据你的需求调整逻辑)
    extracted_lines = [lines[target_index]]
  end
else
  # 没找到关键词时的提示
  puts "未找到包含关键词 #{keyword} 的行"
end

# 输出提取结果
puts extracted_lines.join("\n")

运行这段代码后,你会得到:

Karawara WA 6152
Pin: 08 9200 4211 Fax: oe 9200 4212

额外处理:如果有多个匹配行的情况

如果你的文本里可能有多行包含目标关键词,想要提取每个匹配行对应的两行,可以用下面的代码:

matches = lines.each_with_index.select { |line, idx| line.include?(keyword) }
extracted_lines = matches.flat_map do |line, idx|
  if idx < lines.length - 1
    [line, lines[idx + 1]]
  else
    [line]
  end
end

# 用空行分隔不同匹配组输出
puts extracted_lines.join("\n\n")

小提示

  • 如果你的ParsedText里的换行符是\r\n(Windows格式),可以把split("\n")改成split(/\r?\n/)来兼容两种换行格式。
  • 如果需要精确匹配关键词(比如不要误匹配包含61523的行),可以用正则表达式:line.match?(/\b#{Regexp.escape(keyword)}\b/),这样只会匹配独立的6152单词。

内容的提问来源于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.25 04:17:44