我需要字符串中正则表达式每次出现的MatchData.这与Match All Occurrences of a Regex中建议的扫描方法不同,因为这只会给我一个字符串数组(我需要完整的匹配数据,以获取开始和结束信息等).

input = "abc12def34ghijklmno567pqrs"
numbers = /\d+/

numbers.match input # #<MatchData "12"> (only the first match)
input.scan numbers  # ["12", "34", "567"] (all matches, but only the strings)

我怀疑我忽略了一些方法.建议?

推荐答案

你想要

"abc12def34ghijklmno567pqrs".to_enum(:scan, /\d+/).map { Regexp.last_match }

这让你

[#<MatchData "12">, #<MatchData "34">, #<MatchData "567">] 

正如您所见,"诀窍"是构建一个枚举器,以获得每个last_match.

Ruby相关问答推荐

这是按引用传递/值传递的误解,导致此方法无法按预期输出吗?

为什么数组中的 splat 如此昂贵?

Ruby 和用正则表达式分割字符串

你如何称呼 Ruby 中的 &: 运算符?

each_with_index_do 从 1 开始索引

Coffeescript 中等效的 Ruby .times

可可豆荚安装在iOS项目上不起​​作用

Ruby 中的 main是什么?

为什么整数除法在许多脚本语言中舍入?

ActionController::UnknownFormat

rails 控制台、RVM 和 readline 的问题

在现有 Jekyll 安装中切换主题

处理来自 Net::HTTP 的异常的最佳方法是什么?

带有添加和删除参考的 Rails 迁移

如何在 Rails 3 迁移中描述枚举列?

使用 RSpec 测试哈希内容

如何从Ruby中的哈希表中获取第一个键值对

以小时为单位的时差

Ruby中的字符串和符号有什么区别?

如何使用 Ruby 删除回车?