【问题标题】:Extract text between two tags using regex in Ruby在 Ruby 中使用正则表达式提取两个标签之间的文本
【发布时间】:2015-11-29 21:15:35
【问题描述】:

假设我有这个包含html标签的字符串:

<a href="abgeordnete-1128-0----w8397.html" class="small_link">Berlin-Treptow-Köpenick</a>

如何在 ruby​​ 中使用正则表达式提取“Berlin-Treptow-Köpenick”的文本?

谢谢! :)

【问题讨论】:

  • 为什么急于选择答案?
  • 您应该指定提取规则。例如,从示例中可以看出它是由字母数字字符和字符“>”后面的'-' 组成的文本,但读者无法确定是否总是如此。此外,当您给出示例时,将所有输入对象分配给变量(例如 str = "
  • 我知道这个问题已经很老了,但我认为它仍然值得注意:你的标题清楚地表明你想从 2 个标签之间提取文本,但问题没有。此外,您无需指定这些标签是什么。

标签: ruby regex


【解决方案1】:

你可以使用:

html = '<a href="abgeordnete-1128-0----w8397.html" class="small_link">Berlin-Treptow-Köpenick</a>'

html[/>(.*)</, 1]
#=> "Berlin-Treptow-Köpenick"

当您的 HTML 部分更复杂时,我建议使用像 Nokogiri 这样的库:

html = '<a href="abgeordnete-1128-0----w8397.html" class="small_link">Berlin-Treptow-Köpenick</a>'

require 'nokogiri'

Nokogiri::HTML(html).text
#=> "Berlin-Treptow-Köpenick"
         

【讨论】:

    【解决方案2】:

    我假设要提取的字符串由字母数字字符(包括重音字母)和连字符组成,并且该字符串紧跟字符 '&gt;' 的第一个实例之后。

    string =
    '<a href="abgeordnete-1128-0----w8397.html" class="small_link">Berlin-Treptow-Köpenick</a>'
    
    r = /
        (?<=\>)       # match '>' in a positive lookbehind
        [\p{Alnum}-]+ # match >= 0 alphameric character and hyphens
        /x            # extended or free-spacing mode
    
    string[r] #=> "Berlin-Treptow-Köpenick"
    

    请注意,/A-Za-z0-9/'ö' 等重音字符不匹配。

    或者,可以使用 POSIX 语法:

    r = /(?<=\>)[[[:alnum:]]-]+/
    

    【讨论】:

      【解决方案3】:
      string = '<a href="abgeordnete-1128-0----w8397.html" class="small_link">Berlin-Treptow-Köpenick</a>'
      
      string.scan(/<[a][^>]*>(.+?)<\/[a]>/).flatten
      

      【讨论】:

        【解决方案4】:

        ActionController::Base.helpers.strip_tags(html)

        这个基础助手只返回文本

        html = "&lt;a href=\" https://something.com/\"&gt;&lt;/a&gt;&lt;br&gt;&lt;strong style=\"color: red;\"&gt;&lt;em&gt;&lt;del&gt;this&lt;/del&gt;&lt;/em&gt;&lt;/strong&gt; &lt;strong style=\"color: red;\"&gt;&lt;em style=\"color: red;\"&gt;works&lt;/em&gt;&lt;/strong"

        这将被返回“这有效”

        【讨论】:

          猜你喜欢
          • 2017-02-25
          • 2015-05-17
          • 1970-01-01
          • 2011-09-27
          • 1970-01-01
          • 2013-02-08
          • 1970-01-01
          • 2016-02-03
          • 1970-01-01
          相关资源
          最近更新 更多