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

Ruby Nokogiri解析复杂HTML表格:合并分散TD文本

用Ruby Nokogiri提取并合并连续td.detailData文本的方案

示例HTML

假设你的目标HTML结构如下:

<table class="detailRecordTable">
  <tr>
    <td class="detailData">单个单元格的完整文本</td>
    <td class="label">无关标签</td>
    <td class="detailData">分散内容的第一部分</td>
    <td class="detailData">分散内容的第二部分</td>
    <td class="detailData">分散内容的第三部分</td>
    <td class="label">其他无关内容</td>
    <td class="detailData">最后一个独立文本</td>
  </tr>
</table>

期望输出

把连续的.detailData单元格文本合并,最终得到数组:

["单个单元格的完整文本", "分散内容的第一部分 分散内容的第二部分 分散内容的第三部分", "最后一个独立文本"]

正确实现代码

require 'nokogiri'

# 替换为你的实际HTML内容
html = <<~HTML
<table class="detailRecordTable">
  <tr>
    <td class="detailData">单个单元格的完整文本</td>
    <td class="label">无关标签</td>
    <td class="detailData">分散内容的第一部分</td>
    <td class="detailData">分散内容的第二部分</td>
    <td class="detailData">分散内容的第三部分</td>
    <td class="label">其他无关内容</td>
    <td class="detailData">最后一个独立文本</td>
  </tr>
</table>
HTML

doc = Nokogiri::HTML(html)
target_table = doc.at_css('table.detailRecordTable')

merged_texts = []
current_batch = []

# 遍历表格内所有td元素
target_table.css('td').each do |td|
  if td.attribute('class')&.value&.include?('detailData')
    # 是目标td,将文本去空格后加入当前批次
    current_batch << td.text.strip
  else
    # 遇到非目标td,若当前批次有内容则合并后存入结果
    unless current_batch.empty?
      merged_texts << current_batch.join(' ')
      current_batch = []
    end
  end
end

# 处理循环结束后剩余的最后一批目标td
merged_texts << current_batch.join(' ') unless current_batch.empty?

# 输出结果
p merged_texts

代码逻辑说明

  • 先定位到目标表格detailRecordTable
  • 遍历表格内所有td,用current_batch临时存储连续的目标td文本
  • 遇到非目标td时,将临时存储的文本合并后加入结果数组,清空临时批次
  • 循环结束后检查临时批次是否有剩余内容,避免遗漏最后一组连续目标td

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:00:32