试图分裂一个字符串(红宝石)

时间:2013-11-24 02:39:11

标签: ruby regex string split

我是Ruby的新手。我正在尝试制作一些简单的计算器程序。所以,基本上它应该做的是你输入类似的东西 4 + 2 它输出6.简单,对吧?所以我认为。我正试图在所有操作字符上分割一个字符串,所以我让这个快速的正则表达式认为它会起作用。它没有。

class Calculator 
def add(a,b)
    return a+b
end
def sub(a,b)
    return a-b
end
def div(a,b)
    return a/b
end
def mul(a,b)
    return a*b
end
end

operation = gets.split("[\/\+\-\*]")
print(operation)
sleep()

sleep()是暂停控制台所以我可以看看我的输出。但是现在,它正在输出["4+2\n"] ??我不知道我做错了什么。我需要一些帮助。 (它应该输出["4","+","2"])。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您不需要转义角色类中的每个角色。请考虑以下事项:

operation = gets.gsub(/[^\d\/*+-]/, '').split(/([\/*+-])/)

operation = gets.split(/([\/*+-])/).map(&:strip)

答案 1 :(得分:1)

对于正则表达式,您要使用/而不是"

operation = gets.split(/[\/\+\-\*]/) # ["4", "2\n"]

使用条带删除了一个额外的换行符:

operation = gets.strip.split(/[\/\+\-\*]/) # ["4", "2"]

但是我们失去了运营商。查看split的文档:

  

如果pattern包含组,则将返回相应的匹配项   在数组中也是如此。

在我们的正则表达式中添加()会创建一个组。那么我们就有了:

operation = gets.strip.split(/([\/\+\-\*])/) # ["4", "+", "2"]

答案 2 :(得分:0)

您可以尝试以下代码。

operation = gets.chomp.gsub(/[\/\+\-\*]/, ';\0;').split(";")
print(operation)

执行结果:

4+2/3*9-0
["4", "+", "2", "/", "3", "*", "9", "-", "0"]