使用Ruby扫描方法捕获组不能按预期工作

Den*_*nko 4 ruby regex

我需要从多行字符串中获取一组浮点数(正数和负数).例如:-45.124, 1124.325等等

这是我做的:

text.scan(/(\+|\-)?\d+(\.\d+)?/)
Run Code Online (Sandbox Code Playgroud)

虽然它在regex101上工作正常(捕获组0匹配我需要的所有东西),但它在Ruby代码中不起作用.

任何想法为什么会发生以及如何改进?

Wik*_*żew 6

您应该删除捕获组,或使它们不捕获:

text = " -45.124, 1124.325"
puts text.scan(/[+-]?\d+(?:\.\d+)?/)
Run Code Online (Sandbox Code Playgroud)

demo,输出:

-45.124
1124.325
Run Code Online (Sandbox Code Playgroud)

scan文档:

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

好吧,如果你还需要像.04你可以使用的那样匹配浮子[+-]?\d*\.?\d+.看另一个演示

  • 那真是让人大开眼界。谢谢 (2认同)