【问题标题】:Regexp for an array with 2 elements具有 2 个元素的数组的正则表达式
【发布时间】:2015-08-08 06:38:41
【问题描述】:

我不知道 ruby​​ 中是否存在一个正则表达式来表示您期望一个包含 2 个整数的数组,并且每个数字不能大于 10 或小于 0。并且两个数字的加法不能为大超过 10。我一直在互联网上寻找,但我没有找到任何有用的东西。我希望你能帮助我。谢谢……

我的尝试类似于

expect(game.player.shoot).to eq([\d[0-10],\d[0-10]])

但我知道根本不工作......

【问题讨论】:

  • 你能举个例子(输入加预期输出)吗?目前尚不清楚该数组在应用正则表达式的字符串中是如何表示的。请注意,要求两个整数为非负且总和最多为 10 意味着每个整数不超过 10。
  • Downvote 是我的,因为我发布了一个模糊的问题并且没有回应澄清请求(我的和@floum 的)。如果您通过编辑澄清,我将收回反对票。
  • 我试图测试一个方法 player.shot 返回一个包含两个整数的数组,每个整数都等于或大于 0 且等于或小于 10。我正在做 Kata保龄球。但无论如何,我一直在尝试另一种更好的方法。很抱歉回复晚了。

标签: ruby regex rspec


【解决方案1】:

如果你真的想使用正则表达式,我建议你使用类似下面的方法。

这是故意分两步完成的,因为您正在测试两个不同的事物并保持断言隔离。

expect( game.player.shoot.count ).to eq(2)
expect( game.player.shoot ).to all( match(/[0-9]|10/) )

正如之前在其他答案中所说,只有当 game.player.shoot 是 Strings 数组时才有效,否则最后一行应该更像

expect( game.player.shoot ).to all( (be >= 0).and(be <= 10) )

expect( game.player.shoot ).to all( satisfy{ |shoot| (0..10).include? shoot } )

【讨论】:

    【解决方案2】:

    我宁愿不使用正则表达式来检查数组中的值。 你的价值观是字符串吗?如果是这样,它们不应该真的是字符串或更早解析吗?

    如果它们已经是整数,这应该可以解决问题:

    expect(game.player.shoot.all? {|s| (0..10).include?(s) }).to be_true
    

    检查它们的总和不大于 10:

    expect(game.player.shoot.reduce(:+)).to be <= 10
    

    【讨论】:

    • 是的。它们是整数。我已经使用了您的第一个解决方案,并且对我很有用。我已经用于测试一个方法返回一个整数从 0 到 10 的数组。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2012-12-05
    相关资源
    最近更新 更多