Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试拆分字符串(ruby)_Ruby_Regex_String_Split - Fatal编程技术网

正在尝试拆分字符串(ruby)

正在尝试拆分字符串(ruby),ruby,regex,string,split,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

我对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”]
)。提前感谢。

对于要使用
/
而不是
的正则表达式,请执行以下操作:

operation=get.split(/[\/\+\-\*]/)\\[“4”,“2\n”]

有一个额外的换行符,用strip删除:

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

但我们失去了接线员。查看文档:

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

在正则表达式中添加
()
将创建一个组。因此,我们有:


<> >代码>操作=获取.脱衣.拆分(/(\/\+\**)/)[ [ 4 ],“+”,“2”] < /代码>

不需要逃离字符类内的每个字符.请考虑以下内容:

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


您可以尝试以下代码

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

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

非常感谢,但是我不理解gets.strip.split。我知道它会剥离换行符,但它不应该是
gets.split(无论什么).strip
?Split返回一个数组。strip对字符串进行操作,在调用Split之前我将删除换行符。-1在发布正则表达式答案之前,了解如何在正则表达式中转义。是的,但使用
\d
而不是
0-9
4+2/3*9-0
["4", "+", "2", "/", "3", "*", "9", "-", "0"]