ruby - 用正则表达式数猫

标签 ruby regex

所以我想多次匹配其中包含“cat”一词的字符串,例如:

"cat cat cat cat cat"

"cat   cat cat  cat"

如果除了“猫”或空格之外还有其他任何东西,我不想匹配。所以我可以这样做:

^(cat\s*)+$

但是,我想找出字符串中出现了多少只猫。一种方法是计算组的数量,但是上面的正则表达式只会给我一个包含第一只猫的组,而不是每只猫的捕获量。有没有办法使用正则表达式来做到这一点?

最佳答案

我没有看到有人提到我认为显而易见的答案,使用 String#scan:

str = "cat cat cat    catcat"
str.scan('cat').size #=> 5

如果您只是使用正则表达式:

str.scan(/cat/).size #=> 5

如果您只想捕获唯一的而不是同时出现的事件:

str.scan(/\bcat\b/).size #=> 3

编辑:

@sawa 指出对 OP 的问题存在(相当大的)误解空间。这涵盖了如果 cat"" 之外的内容在字符串中,OP 不希望进行搜索的情况。

str.scan('cat').size if str.gsub(/(?:cat| )+/, '').empty? #=> 5

我之前部分中的其他变体仍然可以应用。

而且,由于“空白”可能不仅仅是一个简单的空格,"\s" 也应该可以正常工作。

关于ruby - 用正则表达式数猫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361358/

相关文章:

ruby-on-rails - 如何将 form_for 与自定义路由一起使用?

ruby - 在 ruby​​ 算法中使用堆

ruby-on-rails - rails 电子邮件错误 - 530-5.5.1 需要身份验证。

ruby - iRuby 内核不断被杀死

c++ - 在没有正则表达式的情况下选择特定的字符串模式

java - 计费系统 - 编程

c# - 匹配 M/YYYY、MM/YYYY、M/YY 或 MM/YY 格式的正则表达式

python - 只匹配IP地址,不匹配其他数字

c# - 西里尔文文本验证

regex - R:如何将字符串的一部分转换为变量名并在同一字符串中返回其值?