【问题标题】:Cleaning a hrefs within an array清理数组中的href
【发布时间】:2016-06-23 12:37:36
【问题描述】:

我将一系列href 存储在一个数组中,我想清理它们以便只留下链接或去掉撇号。谁能帮我用这种方式清理阵列?

以下是数组中的一个摘录,以提供存储内容的示例

<a href="http://www.abdn.ac.uk/study/courses/undergraduate/B9C7/">View course details on provider's website</a>

这是否可以使用 gsub 完成,如果可以,如何?

编辑包括: 我通过抓取数据创建了如下数组:

def process_course_details(course_details)
    details_array =[]
    details_link = true 
    entry_link = true

            details_info = {}
            # Sets all data in hash
            @details_url = course_details.search('div.coursedetails_programmeurl a')
            @details_url.map{ |link| link[/href="([^"]*)"/, 1]} 
            details_info[:url]          = @details_url

            details_array.push(details_info)
            print_details_info(details_info)


         entry_link = course_details.search('ul.details_tabs a').first
         if entry_link

             details_info[:entry] = process_entry(@mechanize.get(entry_link["href"]))
         end 

 end

【问题讨论】:

  • 您能否发布数组和期望的结果?你也有解决的办法吗?
  • 为了确保我们了解您拥有什么以及您想要什么,您能否发布一个当前数组(或其中的一部分)的 sn-p 和一个您想要的 sn-p要查看的数组?它不需要完整,但查看包含 2-3 个条目的示例会有所帮助。
  • 数组很大,包含几千个条目。如果您有电子邮件地址,我可以向您发送包含 cmets 的代码,解释发生了什么?我通过从另一个网站抓取数据来创建数组,并且对此相当陌生,所以不太确定如何从数组中显示正确的 sn-p。我已经使用 gsub 成功清理了一个数组,但无法使用相同的方法来清理:def clean_uniname(text) return text.gsub!(/\s|"|'/, '') end
  • 我已经编辑了问题以显示数组的创建,希望对您有所帮助。

标签: ruby-on-rails arrays ruby gsub code-cleanup


【解决方案1】:
▶ str = %|<a href="http://www.abdn.ac.uk/study/courses/undergraduate/B9C7/">View course details on provider's website</a>| # c'mon, SO’s parser
▶ str[/<a.+href="(.*?)"/, 1]
#⇒ "http://www.abdn.ac.uk/study/courses/undergraduate/B9C7/"

对于字符串数组:

▶ arr = [str] * 3
▶ arr.map { |s| s[/<a.+href="(.*?)"/, 1] }

【讨论】:

    【解决方案2】:

    解析整个数组:

    Array(@details_url).map{ |link| link.innert_html[/href="([^"]*)"/, 1] }
    

    您可以在Rubular 主页上尝试正则表达式。

    【讨论】:

    • 我已添加:@details_url = course_details.search('div.coursedetails_programmeurl a') 以便能够在其他地方调用它,因此已将您建议的代码添加到末尾这个:@details_url.map{ |链接| link[/href="([^"]*)"/, 0]} 但我收到以下错误代码:`[]': wrong number of arguments (given 2, expected 1) (ArgumentError). 你有知道出了什么问题或如何解决这个问题吗?
    • 第一件事是:把括号末尾的“0”改成“1”,意思是“取正则表达式的第一个子组”。您发布的错误提示您 .search 命令的结果是数组数组,而不是字符串数组。 course_details 属于哪种类型?我在 ruby​​ 的标准库中找不到.search 方法
    • .search 来自我用来抓取我存储在数组中的数据的 nokogiri gem。我也在使用机械化宝石。它可能是一个数组数组,我不完全确定......我已经编辑了最初问题底部的代码,让您更好地了解我目前拥有的内容。希望这会有所帮助。
    • 好的,在 Nokogiri 中找到了有问题的方法。据我了解该方法,它返回 Nokogiri::Node 类型的对象。此外,如果只找到一个,它只会返回单个节点,而不是 NodeSet。你必须确保的第一件事是你总是有一个数组,因此将你的结果如下所示:Array(@details_url).map... 第二:你现在有一个节点数组,你将不得不解析它们的内部 HTML,而不是它们自己,我已相应地更新了我的答案中的代码。
    • 感谢您的帮助,您提供的代码似乎并未删除数组中的撇号,但我正在尝试将数组存储在数据库中,并将撇号存储在每个@details_url 的条目阻止我这样做。我对此很陌生。
    猜你喜欢
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2015-01-24
    • 2017-04-26
    • 2018-05-19
    • 2014-03-29
    相关资源
    最近更新 更多