Ruby扫描具有可选的匹配项,返回nil(可选除外)

时间:2018-06-21 21:51:33

标签: ruby regex

我正在运行以下命令来捕获字符串中的一系列数值(浮点数和整数):

示例:

x = "This is the 1st string with 2 quotes and took 3.4 seconds to write."

运行

x.scan(/\d+(\.\d+)?/)

返回

[[nil], [nil], [".4"]]

但我正在寻找

[["1"], ["2"], ["3.4"]]

我在这里做错了什么?还是有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

来自Ruby docs

  

如果模式不包含任何组,则每个结果都包含   匹配的字符串$&。如果模式包含组,则每个人   结果本身就是一个数组,每个组包含一个条目。

由于您的模式包含捕获组,因此您将获得后者的行为。使群组不被捕获会给您您想要的东西。

x.scan(/\d+(?:\.\d+)?/)