我有这个:
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>"
]
我知道我可以使用一些正则表达式和数组/哈希和嵌套循环来实现 我想知道我是否可以使用Nokogiri以某种方式在这个过程中引入一些优雅?
答案 0 :(得分:3)
你拥有的是一个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>"]
这匹配您想要的输出。
答案 1 :(得分:0)
您可以使用split
命令,built into Ruby's String class。您可以像这样使用它:
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
function遍历数组。我不确定你到底要做什么呢?获取数组中值的索引?如果是这种情况,您可以像这样使用Array类的index
method:
ary.index(substring)