【问题标题】:Parsing through text to find html tags in Ruby 1.9.x在 Ruby 1.9.x 中解析文本以查找 html 标签
【发布时间】:2011-07-10 18:30:13
【问题描述】:

我希望能够匹配两个标签之间的文本,从开始标签开始到结束标签结束。

假设我在一个名为“text”的变量中有这段文本:

some text some text some text some text some text
<some_tag>
  some text some text some text some text some text
</some_tag>
some text some text some text some text some text

我想解析内容'text'直到它找到一个开始标签,在本例中是'some_tag',一旦它找到一个开始标签,我希望它捕获所有内容,直到标签关闭。

我已经用块和正则表达式鬼混了大约一个小时,似乎找不到解决这个问题的好方法。

不胜感激,谢谢!

【问题讨论】:

    标签: ruby string text-parsing


    【解决方案1】:

    您应该使用 HTML 解析器。正则表达式和 HTML 往往会产生不稳定的混合,这会导致大剂量的精神错乱。

    使用Nokogiri

    require 'nokogiri'
    
    html = <<EOT
    some text some text some text some text some text
    <p>
      some text some text some text some text some text
    </p>
    some text some text some text some text some text
    EOT
    
    doc = Nokogiri::HTML::DocumentFragment.parse(html)
    
    puts doc.search('p').map { |n| n.inner_text }
    
    >>   some text some text some text some text some text
    

    这是在 HTML 片段中搜索,寻找&lt;p&gt; 标签。对于它找到的每一个,它都会提取内部文本。

    我正在使用 Nokogiri 的 CSS 模式,使用 "p"。我可以改用 XPath,但 CSS 被更多人理解。

    【讨论】:

    • 谢谢,我已经多次查看 Nokogiri,但到目前为止我发现文档非常糟糕。但这正是我从 nokogiri.org 网站上直接看到的。你有什么好的参考资料吗?谢谢!
    • @Rhinoo,文档还不错。至少他们拥有它们,这不仅仅是 Ruby 的一些核心库。最好的办法是阅读他们的教程,浏览他们网站上的所有文档,然后在 Nokokiri-Talk 邮件列表中搜索有趣的主题。他们的邮件列表是他们的主要支持和开发人员监控的地方,因此您会从最了解它的人那里直接获得关于如何做事的非常好的示例。
    • @Rhinoo,如果这回答了您的问题,请务必标记答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2012-05-26
    • 1970-01-01
    • 2012-04-02
    • 2016-08-14
    • 2016-05-06
    • 2017-06-05
    相关资源
    最近更新 更多