从XML中删除内容与几个单词中的任何一个匹配的元素



我有这个:

string1 = "<det>This</det> <vbz>is</vbz> <det>a</det> <nn>text</nn> <in>that</in> <vbz>has</vbz> <det>some</det> <vbn>desired</vbn> <nn>text</nn> <to>to</to> <vb>be</vb> <vbn>found</vbn>" 
substring = "desired text" 

我需要一些类似的东西:

ary = [
  "<det>This</det>", "<vbz>is</vbz>", "<det>a</det>", "<in>that</in>",
  "<vbz>has</vbz>", "<det>some</det>", "<to>to</to>", "<vb>be</vb>",
  "<vbn>found</vbn>"
]

我知道我可以用一些正则表达式、数组/散列和嵌套循环来实现
不过,我想知道我是否可以用野木木在这个过程中引入一些优雅?

您所拥有的是一个XML文档片段,因此您可以像这样在上面使用Nokogiri:

require "nokogiri"
doc = Nokogiri::XML::DocumentFragment.parse(string1)

要获得与子字符串中的单词不匹配的所有元素的列表,请执行以下操作:

words = substring.split
doc.xpath('*').reject {|e| words.include? e.text}.map(&:to_s)
#=> ["<det>This</det>", "<vbz>is</vbz>", "<det>a</det>", "<in>that</in>", "<vbz>has</vbz>", "<det>some</det>", "<to>to</to>", "<vb>be</vb>", "<vbn>found</vbn>"]

这与您想要的输出相匹配。

您可以使用split命令,该命令内置于Ruby的String类中。你可以这样使用它:

string1 = "<det>This</det> <vbz>is</vbz> <det>a</det> <nn>text</nn> <in>that</in> <vbz>has</vbz> <det>some</det> <vbn>desired</vbn> <nn>text</nn> <to>to</to> <vb>be</vb> <vbn>found</vbn>"
ary = string1.split

然后,您可以使用array类的map函数在数组中循环。我不确定你到底想做什么?是否获取数组中值的索引?如果是这种情况,您可以使用Array类的index方法,如下所示:

ary.index(substring)

相关内容

  • 没有找到相关文章