所以我想多次匹配其中包含“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/