好的,听起来很简单,我仍然无法弄明白该怎么做(想象一下,我甚至决定改变语言)。
所以,我有简单的文字或包含一些标签的文字(注意:有些可能不被视为有效的 html标签,例如<ref>
)我想删除所有标签及其内容。
与Nokogiri的.search("//text()").text
一起尝试但距离我的需求还很远。
想法?
P.S。我正在寻找一种防弹,100%工作的解决方案,因此RegEx是不可能的......
SAMPLE INPUT / OUTPUT
One <!-- Two -->Three
应该返回One Three
。
This is <a href='#'>some Text</a>
应该返回This is
。
Even more <ref name='tag'>reference</ref><br>text
应该返回Even more text
。
答案 0 :(得分:1)
Nokogiri似乎对手头的问题有点过分,我会使用正则表达式来解决它,如下所示
input = "One <!-- Two -->Three"
input.gsub(/(\<.+\>)/)
#=> "One Three"
input = "This is <a href='#'>some Text</a>"
input.gsub(/(\<.+\>)/, "")
#=> "This is "
input = "Even more <ref name='tag'>reference</ref><br>text"
input.gsub(/(\<.+\>)/, "")
#=> "Even more text"
rubular上的演示
答案 1 :(得分:1)
如果您想使用Nokogiri执行此操作,则必须使用DocumentFragment
类,因为该文本不是有效的HTML或XML文档。
doc = Nokogiri::HTML::DocumentFragment.parse(text)
puts doc.xpath("text()")
这为您提供了指定的输出。