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
相关产品推荐
相关产品推荐

