我有这个:
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)