我想将<p>A</p>,<p>B</p>,<p>C</p>转换为如下所示的数组:
["A","B", "C"]我试过.scan(/(<p>)(.*?)(<\/p>)/i)了。Ruby中最方便、最健壮、容错能力更强的方式是什么?
发布于 2014-10-23 12:36:45
在字符串片段上使用正则表达式
如果你知道你的HTML标签总是小写的,而你的段落正文总是大写的,那么这是可行的:
"<p>A</p>,<p>B</p>,<p>C</p>".scan /\p{Upper}/
#=> ["A", "B", "C"]但它将是脆弱的。不过,这肯定适用于你发布的语料库。
在HTML片段上使用Nokogiri
因为您有一个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也会可靠地从您的段落标签中提取文本节点,并且会忽略节点之外的无关字符,例如字符串片段中的逗号。
发布于 2014-10-23 10:45:34
尝试如下所示:
"<p>A</p>,<p>B</p>,<p>C</p>".gsub(/<p>|<\/p>/,'').split(',')这将删除<p>和</p>,并将结果字符串拆分为一个数组
发布于 2014-10-23 19:18:58
在编辑正则表达式以删除<p>标记周围的括号,然后平整结果之后,我得到了您想要的输出。
"<p>A</p>,<p>B</p>,<p>C</p>".scan(/<p>(.*?)<\/p>/i).flatten
这就产生了["A", "B", "C"]。
http://ideone.com/bfDtGc
https://stackoverflow.com/questions/26520432
复制相似问题