首页 > 解决方案 > 带有可选匹配匹配的 Ruby 扫描,返回 nil,除了可选

问题描述

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

例子:

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"]]

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

标签: rubyregex

解决方案


来自Ruby 文档

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

由于您的模式包含一个捕获组,因此您将获得后一种行为。使组不被捕获可以满足您的需求。

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

推荐阅读