【问题标题】:Regular Expressions to remove unnecessary HTML tags删除不必要的 HTML 标记的正则表达式
【发布时间】:2017-06-19 03:26:03
【问题描述】:

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

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

我正在尝试删除这一系列不必要的标签并像这样更改它们。

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

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

到目前为止它运行良好,但现在我对这样的标签有疑问:

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

我的正则表达式还删除了必要的标签,例如&lt;span class="bar"&gt;.

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

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

编辑:感谢您的评论,但抱歉信息不足,

  1. 有很多类,如 "foo","bar","hoge","abc"...等
  2. 我不能指望连续标签有什么类。
  3. 另外,我无法预计每个 html 文件中有多少个连续标签

【问题讨论】:

  • 所以基本上你正在尝试删除具有相同 css 类的标签,并且标签是否相同并且连续出现。
  • 你或许可以使用github.com/rgrove/sanitize

标签: html ruby regex


【解决方案1】:

最好用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 2011-02-28
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多