【问题标题】:How can I convert "<p>A</p>,<p>B</p>,<p>C</p>" into an array?如何将“<p>A</p>,<p>B</p>,<p>C</p>”转换为数组?
【发布时间】:2014-12-18 16:03:31
【问题描述】:

我想将&lt;p&gt;A&lt;/p&gt;,&lt;p&gt;B&lt;/p&gt;,&lt;p&gt;C&lt;/p&gt; 转换成如下数组:

["A","B", "C"]

我试过.scan(/(&lt;p&gt;)(.*?)(&lt;\/p&gt;)/i)。什么是 Ruby 中最方便/最强大的方式,并且具有更高的容错性?

【问题讨论】:

    标签: html ruby regex


    【解决方案1】:

    在您的字符串片段上使用正则表达式

    如果你知道你的 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 也会可靠地从您的段落标签中提取文本节点,并且会忽略节点外的无关字符,例如字符串片段中的逗号。

    【讨论】:

      【解决方案2】:

      试试这样的:

      "<p>A</p>,<p>B</p>,<p>C</p>".gsub(/<p>|<\/p>/,'').split(',')
      

      这将删除 &lt;p&gt;&lt;/p&gt; 并将生成的字符串拆分为一个数组

      【讨论】:

        【解决方案3】:

        在编辑您的正则表达式以删除 &lt;p&gt; 标记周围的括号,然后将结果展平后,我得到了您想要的输出。

        "&lt;p&gt;A&lt;/p&gt;,&lt;p&gt;B&lt;/p&gt;,&lt;p&gt;C&lt;/p&gt;".scan(/&lt;p&gt;(.*?)&lt;\/p&gt;/i).flatten

        这会产生["A", "B", "C"]

        http://ideone.com/bfDtGc

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-20
          • 2021-12-23
          • 2020-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多