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
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
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"]
您可以遍历每个 char 并检查 char.to_i 是否与 char 相同,如果是则映射它。
也检查这个
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
我建议使用String#scan
:
str = "12abc3 def*40"
str.scan(/\d+/)
#=> ["12", "3", "40"]
str.scan(/\d+/).map(&:to_i)
#=> [12, 3, 40]
它使用正则表达式,但正则表达式正是手头任务的正确工具。