4

次のような配列があります。

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

文字列として保存されているにもかかわらず、配列内のすべての数値を削除する方法はありますか?

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

ヒントをありがとう。

4

4 に答える 4

5

正規表現パターンを使用する

s = ["lorem", "ipsum", "1734", "dolor", "1", "301", "et", "4102", "92"]
s.reject { |l| l =~ /\A\d+\z/ }
# => ["lorem", "ipsum", "dolor", "et"] 
于 2012-10-18T17:10:19.037 に答える
4
s = ["lorem", "ipsum", "1734", "dolor", "1", "301", "et", "4102", "92"]
s.reject{|s| s.match(/^\d+$/) }
于 2012-10-18T17:11:35.717 に答える
3

すべての文字列が整数の場合、@Simoneの答えはうまく機能します。

すべての数値表現(浮動小数点数と科学的記数法)をチェックする必要がある場合は、次のことができます。

s = %w[ foo 134 0.2 3e-3 bar ]
s.reject!{ |str| Float(str) rescue false }
p s
#=> ["foo", "bar"]
于 2012-10-18T17:20:51.733 に答える
0

私が言える1つの方法は次のとおりです。REGEX一致

  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
    
于 2012-10-18T17:12:37.797 に答える