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

如何在Rails中基于H3标签拆分HTML内容并正则捕获文本块

在Rails中拆分H3标题与对应内容的两种方法

嘿,既然你已经有Rails基础,咱们直接上手解决这个问题——把给定的HTML内容按<h3>标签的标题拆分,对应到各自的内容块。下面给你两种实用方案:正则快速实现,以及更健壮的HTML解析库方案。

方案一:用正则快速捕获(适合结构简单的HTML)

如果你的HTML结构很规整,没有复杂的<h3>属性或嵌套标签,可以直接用正则的scan方法来匹配标题和内容:

# 先把你的HTML内容存成字符串
html_content = <<~HTML
<h3>需携带物品</h3> <p><p>务必携带舒适的步行鞋,出行时随时可能步行,且降雨概率较高。</p></p> <h3>抵达方式</h3> 前往该地的方式多样:它位于风景绝美的自然公园内。<h3>切勿遗忘</h3> 步行鞋!
HTML

# 用正则匹配<h3>标题和后续内容(直到下一个<h3>或文本结束)
matches = html_content.scan(/<h3>(.*?)<\/h3>(.*?)(?=<h3>|$)/m)

# 转成哈希,键是标题,值是对应内容
result_hash = matches.to_h

# 输出看看结果
puts result_hash
# => {"需携带物品"=>" <p><p>务必携带舒适的步行鞋,出行时随时可能步行,且降雨概率较高。</p></p> ", "抵达方式"=>" 前往该地的方式多样:它位于风景绝美的自然公园内。", "切勿遗忘"=>" 步行鞋!"}

正则说明:

  • <h3>(.*?)<\/h3>:非贪婪匹配<h3>标签里的标题文本
  • (.*?)(?=<h3>|$):匹配标题后的所有内容,直到遇到下一个<h3>或者文本结尾(正向预查,不会把下一个<h3>包含进来)
  • /m:多行模式,让.能匹配换行符(如果你的HTML有换行的话)

方案二:用Nokogiri解析(推荐,适合复杂HTML)

正则处理HTML天生有局限性——如果<h3>加了class/id属性,或者内容里有嵌套标签,正则很容易失效。Rails项目一般默认集成了Nokogiri(如果没有,直接gem install nokogiri就行),用它来解析HTML更可靠:

require 'nokogiri'

html_content = <<~HTML
<h3>需携带物品</h3> <p><p>务必携带舒适的步行鞋,出行时随时可能步行,且降雨概率较高。</p></p> <h3>抵达方式</h3> 前往该地的方式多样:它位于风景绝美的自然公园内。<h3>切勿遗忘</h3> 步行鞋!
HTML

# 解析HTML文档
doc = Nokogiri::HTML(html_content)
result_hash = {}

# 遍历所有<h3>标签
doc.css('h3').each do |h3_tag|
  # 提取标题文本(自动清理多余空格)
  title = h3_tag.text.strip
  content_parts = []
  
  # 遍历<h3>之后的兄弟节点,直到遇到下一个<h3>
  next_node = h3_tag.next_sibling
  while next_node && next_node.name != 'h3'
    # 把节点转成字符串,清理多余空格后加入内容数组
    content_parts << next_node.to_s.strip
    next_node = next_node.next_sibling
  end
  
  # 把内容数组拼接成完整字符串,存入哈希
  result_hash[title] = content_parts.join(' ')
end

# 如果需要纯文本(去掉所有HTML标签),可以把上面的next_node.to_s换成next_node.text
# content_parts << next_node.text.strip

puts result_hash

优势:

  • 不管<h3>有没有属性,都能正确匹配到标题
  • 能处理复杂的嵌套标签结构,不会因为HTML格式变化失效
  • 可以轻松切换提取HTML内容还是纯文本

总结

  • 如果你只是处理简单、固定格式的HTML,正则足够用,速度也快
  • 要是HTML结构可能变化,或者需要长期维护,优先用Nokogiri,稳定性拉满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:00