0
string = "12abc3 def*40"

如果不使用正则表达式,我将如何从该字符串中提取 12、3 和 40?这是我在正则表达式的帮助下的方法。

def numberExtraction(str)
    str_array = str.split(/\D/).delete_if {|char| char == ""}
    str_array.map(&:to_i)
end
4

4 回答 4

2

使用Enumearble#chunk

def extract_numbers(str)
  str.
    chars.
    chunk { |char| ('0'..'9').include? char }.
    select { |is_digit, _| is_digit }.
    map { |_, chars| chars.join }
end

extract_numbers("12abc3 def*40")
#=> ["12", "3", "40"]
于 2013-09-05T08:54:00.707 回答
1

您可以遍历每个 char 并检查 char.to_i 是否与 char 相同,如果是则映射它。

于 2013-09-05T08:31:41.217 回答
0

也检查这个

str = "12abc3 def*40"

str.each_char do |b|
  puts b unless b.ord > 57 or b.ord < 48
end

或者

str.chars { |b| puts b unless b.ord > 57 or b.ord < 48 }

两者都是一样的

结果

1
2
3
4
0
于 2013-09-05T12:28:03.123 回答
-1

我建议使用String#scan

str = "12abc3 def*40"

str.scan(/\d+/)
#=> ["12", "3", "40"]

str.scan(/\d+/).map(&:to_i)
#=> [12, 3, 40]

它使用正则表达式,但正则表达式正是手头任务的正确工具。

于 2013-09-05T09:07:00.483 回答