在Ruby中使用Regex删除Nokogiri元素

时间:2010-01-20 01:20:38

标签: ruby regex nokogiri

这似乎是我现在遇到的最困难的问题,但也许我正在努力让它变得更难。我需要删除一些未知数量的嵌套元素,这些元素可能在句子的开头,也可能不在句子的开头。 span元素在括号中包含许多单词。所以在句子中:

(加密,俚语)互联网防火墙。

(加密,俚语)看起来像这样:

<span class="ib-brac"><span class="qualifier-brac">(</span></span><span class="ib-content"><span class="qualifier-content">cryptography<span class="ib-comma"><span class="qualifier-comma">,</span></span> <a href="/wiki/Appendix:Glossary#slang" title="Appendix:Glossary">slang</a></span></span><span class="ib-brac"><span class="qualifier-brac">)</span></span>

我在想一个好的解决方案是使用正则表达式和nokogiri来检查第一个'('是否存在,如果它存在,删除所有跨度直到结束')',但我不知道这该怎么做。我现在使用的解决方案不考虑可变数量的跨度:

if definition.inner_html =~ /^<span class/
  definition.search("span")[0..4].each do |span|
    span.remove
  end  
end

1 个答案:

答案 0 :(得分:1)

不是100%确定您要执行的操作,但如果您只是不使用索引,则上面的代码可以删除可变数量的跨度:

if definition.inner_html =~ /^<span class/
  definition.search("span").each do |span|
    span.remove
  end
end