从字符串数组中删除数字

4

我有一个这样的数组:

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

有没有一种方法可以删除数组中的所有数字,即使它们被存储为字符串,以便我只剩下以下内容:

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

感谢您提供的任何提示。

2
是否存在浮点字符串 "0.12" 或甚至科学计数法 "3.4e-10" 的可能性?一些字符串是否可以跨多行? - Phrogz
4个回答

5

使用正则表达式模式

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

2
如果您不介意三重否定(拒绝、不匹配、非数字),也可以使用 reject { |w| w !~ /\D/ } - mu is too short
@muistooshort 如果是这样,你可以使用select而不是reject。 ;) - Simone Carletti
但是这样你又会被锚定在原地,而且你也无法让每个人都质疑天才和疯子之间的区别 :) - mu is too short

4
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"]

0

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

  1. 循环遍历所有项目
  2. 然后使用以下代码:

    txt='你的字符串'
    
    re1='(\\d+)'    # 整数 1
    
    re=(re1)
    m=Regexp.new(re,Regexp::IGNORECASE);
    if m.match(txt)
        int1=m.match(txt)[1];
        # 在此处删除项目
    end
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接