正则表达式删除不必要的HTML标记

时间:2017-02-02 06:41:33

标签: html ruby regex

我有很多HTML文件,包含很多不必要的标签。

<span class="foo">A</span><span class="foo">B</span><span class="foo">C</span>...

我试图删除这一系列不必要的标签,然后像这样更改它们。

<span class="foo">ABC</span>

我在Ruby中使用了一个简单的正则表达式。 myhtml.gsub!(/<\/span><span class=".*?">/,"")

到目前为止它运作良好,但现在我对这样的标签有一个问题:

<span class="foo">A</span><span class="bar">B</span><span class="foo">C</span>

我的正则表达式还删除了必要的标记,例如<span class="bar">.

我想像这样使用捕获组 <span class="(.+?)">(.+?)<\/span><span class="\1"> ... 但我不知道如何正确地写它。

如何重写正则表达式来解决它?

编辑:感谢您的评论,但对于缺乏信息感到抱歉,

  1. 有许多课程,如&#34; foo&#34;,&#34; bar&#34;,&#34; hoge&#34;,&#34; abc&#34; ... etc
  2. 我无法期待连续标签的类别。
  3. 另外,我不能&#39;期望每个html文件中有多少个连续标签

1 个答案:

答案 0 :(得分:3)

最佳使用nokogiri

删除标签

doc = Nokogiri::HTML(string)
doc.search("span.foo").remove
doc.to_html

合并连续标签

doc = Nokogiri::HTML(string)
doc.search("span.foo + span.foo").each do |each|
  each.previous_element.inner_html += each.inner_html
  each.remove
end
puts doc.to_html