使用'scan'函数

时间:2017-09-04 12:46:29

标签: ruby

我有一个字符串:

"10/2+3*3/2-3/2+10"

我需要将其转换为数组:

["10", "/", "2", "+", "3", "*", "3", "/", "2", "-", "3", "/", "2", "+", "10"]

不使用任何宝石。

我正在使用以下代码尝试转换它:

"10/2+3*3/2-3/2+10".scan(/[\d*,+,\-,*,\/]/)
# => ["1", "0", "/", "2", "+", "3", "*", "3", "/", "2", "-", "3", "/", "2", "+", "1", "0"]

输出不是我所期望的。

3 个答案:

答案 0 :(得分:4)

使用String#split

"10/2+3*3/2-3/2+10".split(/(\D)/)
#=> ["10", "/", "2", "+", "3", "*", "3", "/", "2", "-", "3", "/", "2", "+", "10"]

答案 1 :(得分:1)

正则表达式中方括号内的逗号被视为逗号。你想要的是模式的结合。

"10/2+3*3/2-3/2+10".scan(/\d+|\+|\*|\/|\-/)

答案 2 :(得分:1)

"10/2+3*3/2-3/2+10".scan(/\d+|./)
  #=> ["10", "/", "2", "+", "3", "*", "3", "/", "2", "-", "3", "/", "2", "+", "10"]