【问题标题】:How to gsub \ in ruby array?如何 gsub \ 在 ruby​​ 数组中?
【发布时间】:2014-02-28 09:48:40
【问题描述】:

如何从数组中删除所有\ 元素?

大小为 6 的数组:

data =
[
      " \"\"http://www.web1.com\\\"",
      "\"",
      " \"\"https://www.web2.com\\\"",
      "\"",
      " \"\"http://www.web3.com\\\"",
      "\"",
 ]

想要的:

 ["www.web1.com", "www.web2.com", "www.web3.com"]

试过了:

 data = 
 => [" \"\"http://www.web1.com\\\"", "\"", " \"\"https://www.web2.com\\\"", "\"", " \"\"http://www.web3.com\\\"", "\""] 
2.0.0-p353 :019 > data.each do |d| 
2.0.0-p353 :020 >     d.gsub!(/\+/,'')
2.0.0-p353 :021?>   end
 => [" \"\"http://www.web1.com\\\"", "\"", " \"\"https://www.web2.com\\\"", "\"", " \"\"http://www.web3.com\\\"", "\""] 
2.0.0-p353 :022 > 

【问题讨论】:

    标签: ruby arrays gsub


    【解决方案1】:

    以下是获得所需输出的方法:

    data.map { |e| e.gsub(/["\s\\\/]|(?:https?:\/\/)/,'') }.reject(&:empty?)
    

    您遍历数据数组并将匹配正则表达式的元素内容替换为''。然后你只需删除空字符串。

    让我稍微解释一下正则表达式:[...] 表示字符组,我们将匹配组中的任何字符; |or 运算符; (?:) 是非捕获组,所以我们必须匹配整个https://http://\s 表示任何空白字符; \\\/ 被转义 \/

    【讨论】:

    • 当然,希望对您有所帮助。
    • 你可以替换 select{|e| !e.empty?} 与拒绝{|e| e.empty?}
    • @Kavu 像 http://www.htps.com/ 这样的 url 或者其他在域部分有 htps 字符的 URL 怎么样 :)
    • @xdazz 是的,它会完全失败 :-D 需要改进我的答案。
    【解决方案2】:

    这将为您提供预期的结果。

    data.grep(/https?:\/\/([^\\]*)/) {|v| v.match(/https?:\/\/([^\\]*)/)[1] }
    

    但是你要知道\是用来转义字符串中的特殊字符的。

    "\\"只有一个字符\"\""只有一个字符"

    【讨论】:

      【解决方案3】:

      您可以通过以下方式对所有 \ 进行 gsub:

      your_string.gsub('\','')
      

      【讨论】:

        【解决方案4】:
        data.grep(/http/){|x|x.delete '\\\" '}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-31
          • 1970-01-01
          • 2012-04-12
          • 2015-05-29
          • 2020-10-16
          • 2018-02-25
          • 1970-01-01
          相关资源
          最近更新 更多