ruby - 是否有内置 api 可以从字符串中提取模式(尽可能多次)?

标签 ruby regex built-in

我想使用 ruby​​ 2.1 尽可能多次地从字符串中提取模式。 String#slice! 看起来很接近,但它只提取第一个匹配项。为了解决这个问题,我编写了以下内容,但感觉很笨拙:

string  = "ababab"
pattern = /a/
matches = []

# clunky
loop do
  m = string.slice!(pattern) || break
  matches << m
end

#=> matches == ["a", "a", "a"]
#=> string  == "bbb"

现在我可以使用自己的 #extract! 方法扩展 String 类,或者为此创建一个辅助对象,但我觉得这是一个足够常见的情况,我只是缺少部分标准 API 或更特殊的方法来执行此操作。

有没有更短的写法?

最佳答案

scan接下来是 gsub!应该分两步做你想做的事:

string  = "ababab"

matches = string.scan /a/   # => ['a', 'a', 'a']
string.gsub! /a/, ''        # => "bbb"

关于ruby - 是否有内置 api 可以从字符串中提取模式(尽可能多次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040682/

相关文章:

ruby - #<Hash :0x3d3cef0> (NoMethodError) in ActiveSupport 3 的未定义方法 `to_json'

mysql - 在 ActiveRecord 中的一个查询中获取多条记录

ruby-on-rails - 使用 Bullet 和 RSpec gem 减少 n+1 查询

Ruby 中类似 Python 的 "as"关键字(用于命名空间)

ios - 如何拨入正则表达式来检测@usernames

terminal - 如何在 Visual Studio Code 中从集成终端引用当前文件

python - 在 python 中子类化内置枚举

javascript - 如何在 JS 中使用 Regexp 制作\一个文字反斜杠

php - 在子目录中创建无限的附加页面

bash - 在 bash 中,如何获取 set -x 的当前状态?