【发布时间】:2014-12-18 16:03:31
【问题描述】:
我想将<p>A</p>,<p>B</p>,<p>C</p> 转换成如下数组:
["A","B", "C"]
我试过.scan(/(<p>)(.*?)(<\/p>)/i)。什么是 Ruby 中最方便/最强大的方式,并且具有更高的容错性?
【问题讨论】:
我想将<p>A</p>,<p>B</p>,<p>C</p> 转换成如下数组:
["A","B", "C"]
我试过.scan(/(<p>)(.*?)(<\/p>)/i)。什么是 Ruby 中最方便/最强大的方式,并且具有更高的容错性?
【问题讨论】:
如果你知道你的 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 也会可靠地从您的段落标签中提取文本节点,并且会忽略节点外的无关字符,例如字符串片段中的逗号。
【讨论】:
试试这样的:
"<p>A</p>,<p>B</p>,<p>C</p>".gsub(/<p>|<\/p>/,'').split(',')
这将删除 <p> 和 </p> 并将生成的字符串拆分为一个数组
【讨论】:
在编辑您的正则表达式以删除 <p> 标记周围的括号,然后将结果展平后,我得到了您想要的输出。
"<p>A</p>,<p>B</p>,<p>C</p>".scan(/<p>(.*?)<\/p>/i).flatten
这会产生["A", "B", "C"]。
【讨论】: