用正则表达式计算猫

Mik*_*sen 2 ruby regex

所以我想在其中匹配一个字符串和单词"cat",例如:

"cat cat cat cat cat"
Run Code Online (Sandbox Code Playgroud)

要么

"cat   cat cat  cat"
Run Code Online (Sandbox Code Playgroud)

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

^(cat\s*)+$
Run Code Online (Sandbox Code Playgroud)

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

the*_*Man 5

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

str = "cat cat cat    catcat"
str.scan('cat').size #=> 5
Run Code Online (Sandbox Code Playgroud)

如果你只需要使用正则表达式:

str.scan(/cat/).size #=> 5
Run Code Online (Sandbox Code Playgroud)

如果您只想捕获唯一的,而不是一起运行的事件:

str.scan(/\bcat\b/).size #=> 3
Run Code Online (Sandbox Code Playgroud)

编辑:

@sawa指出存在(相当大的)误解OP问题的空间.这覆盖了OP不想发生的搜索,如果东西,除了案件cat" "是的字符串中.

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

我上一节中的其他变体仍然可以应用.

并且,由于"空白"可能意味着不仅仅是一个简单的空间,"\s"也应该工作正常.