【问题标题】:Remove numbers from array of strings从字符串数组中删除数字
【发布时间】:2012-10-18 17:06:47
【问题描述】:

我有一个如下所示的数组:

["lorem", "ipsum", "1734", "dolor", "1", "301", "et", "4102", "92"]

有没有办法删除数组中的所有数字,即使它们是作为字符串存储的,所以我只剩下这个了:

["lorem", "ipsum", "dolor", "et"]

感谢任何提示。

【问题讨论】:

  • 是否有可能使用浮点字符串"0.12" 甚至科学记数法"3.4e-10"?有些字符串可以有多行吗?

标签: ruby-on-rails ruby arrays ruby-on-rails-3 string


【解决方案1】:

使用正则表达式模式

s = ["lorem", "ipsum", "1734", "dolor", "1", "301", "et", "4102", "92"]
s.reject { |l| l =~ /\A\d+\z/ }
# => ["lorem", "ipsum", "dolor", "et"] 

【讨论】:

  • 还有reject { |w| w !~ /\D/ },如果你不介意三重否定(拒绝、不匹配、不是数字)。
  • @muistooshort 在这种情况下,您可以使用选择而不是拒绝。 ;)
  • 但是你又被锚定了,你不能让每个人都质疑天才和疯狂之间的区别:)
【解决方案2】:
s = ["lorem", "ipsum", "1734", "dolor", "1", "301", "et", "4102", "92"]
s.reject{|s| s.match(/^\d+$/) }

【讨论】:

    【解决方案3】:

    如果你所有的字符串都是整数,@Simone 的回答会很好。

    如果您需要检查所有数字表示(浮点数和科学记数法),那么您可以:

    s = %w[ foo 134 0.2 3e-3 bar ]
    s.reject!{ |str| Float(str) rescue false }
    p s
    #=> ["foo", "bar"]
    

    【讨论】:

      【解决方案4】:

      我可以说的一种方式是:正则表达式匹配

      1. 循环遍历所有项目
      2. 然后使用这个:

        txt='Your string'
        
        re1='(\\d+)'    # Integer Number 1
        
        re=(re1)
        m=Regexp.new(re,Regexp::IGNORECASE);
        if m.match(txt)
            int1=m.match(txt)[1];
            # REMOVE THE ITEM HERE
        end
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 2011-05-06
        • 2017-02-10
        相关资源
        最近更新 更多