匹配字符串中连续字符的序列

我有字符串"111221"并希望匹配所有连续的相等整数集: ["111", "22", "1"]

我知道有一个特殊的正则表达式可以做到这一点,但我不记得了,我在Googling很糟糕。

在Ruby 1.8.7+中使用正则表达式:

 p s.scan(/((\d)\2*)/).map(&:first) #=> ["111", "22", "1"] 

这是有效的,因为(\d)捕获任何数字,然后\2*捕获该组(第二个左括号)匹配的零或多个。 在scan需要外部(…)来捕获整个匹配。 最后,单独scan返回:

 [["111", "1"], ["22", "2"], ["1", "1"]] 

…所以我们需要贯穿并保留每个数组中的第一个项目。 在Ruby 1.8.6+中(为方便起见,它没有Symbol#to_proc ):

 p s.scan(/((\d)\2*)/).map{ |x| x.first } #=> ["111", "22", "1"] 

没有正则表达式,这是一个有趣的(匹配任何字符)在Ruby 1.9.2中工作:

 p s.chars.chunk{|c|c}.map{ |n,a| a.join } #=> ["111", "22", "1"] 

这是另一个应该在Ruby 1.8.6中工作的版本:

 p s.scan(/./).inject([]){|a,c| (a.last && a.last[0]==c[0] ? a.last : a)< ["111", "22", "1"] 

你可以试试

 string str ="111221"; string pattern =@"(\d)(\1)+"; 

希望可以帮到你