【问题标题】:Trying to split a string (ruby)尝试拆分字符串(红宝石)
【发布时间】:2013-11-24 02:39:11
【问题描述】:

我是 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"])。提前致谢。

【问题讨论】:

    标签: ruby regex string split


    【解决方案1】:

    您不需要转义角色类中的每个角色。考虑以下几点:

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

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

    【讨论】:

    • 可以,但使用\d 而不是0-9
    【解决方案2】:

    对于您想使用/ 而不是" 的正则表达式:

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

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

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

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

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

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

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

    【讨论】:

    • 非常感谢,但我不明白gets.strip.split。我知道它会删除换行符,但它不应该是gets.split(whatever).strip吗?
    • Split 返回一个数组。 strip 对字符串进行操作,我在调用 split 之前删除了 newling。
    • -1 在发布正则表达式答案之前了解在正则表达式中要转义的内容。
    【解决方案3】:

    你可以试试下面的代码。

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

    执行结果:

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

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 2014-01-05
      • 2016-06-28
      • 2014-02-11
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多