我想将<p>A</p>,<p>B</p>,<p>C</p>
转换为如下数组:
["A","B", "C"]
我试过了.scan(/(<p>)(.*?)(<\/p>)/i)
。什么是Ruby中最方便/最健壮的方式,具有更高的容错能力?
答案 0 :(得分:4)
如果你知道你的HTML标签总是小写,并且你的段落主体总是大写,那么这将有效:
"<p>A</p>,<p>B</p>,<p>C</p>".scan /\p{Upper}/
#=> ["A", "B", "C"]
但它会很脆弱。这当然适用于您发布的语料库。
由于您有一个HTML片段,因此您应该使用解析器。例如:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse "<p>A</p>,<p>B</p>,<p>C</p>"
doc.xpath(?p).map &:text
#=> ["A", "B", "C"]
除非你的输入是真正的病态,否则即使输入变化,Nokogiri也会从段落标记中可靠地提取文本节点,并且会忽略节点外部的无关字符,例如字符串片段中的逗号。
答案 1 :(得分:0)
尝试这样的事情:
"<p>A</p>,<p>B</p>,<p>C</p>".gsub(/<p>|<\/p>/,'').split(',')
这将删除<p>
和</p>
并将结果字符串拆分为数组
答案 2 :(得分:0)
在编辑正则表达式后删除<p>
标记周围的括号,然后展平结果,我得到了你想要的输出。
"<p>A</p>,<p>B</p>,<p>C</p>".scan(/<p>(.*?)<\/p>/i).flatten
这会产生["A", "B", "C"]
。