找几个相邻的相同数字

时间:2015-02-16 06:10:05

标签: ruby regex match

你可以帮帮我吗? 我需要一个像

那样分割字符串的正则表达式
"11231114" 

['11', '2', '3', '111', '4']

4 个答案:

答案 0 :(得分:2)

您可以按如下方式实施String#scan

"11231114".scan(/((\d)\2*)/).map(&:first) 
#=> ["11", "2", "3", "111", "4"]

您可以将一个块传递给String#scan,将匹配组推送到一个数组。

matches = []
"11231114".scan(/((\d)\2*)/) do |n,r| matches << n end

<击>

答案 1 :(得分:1)

在Javascript中你可以这样做:

var m = "11231114".match(/(\d)\1*/g)
//=> ["11", "2", "3", "111", "4"]

您可以在任何使用的语言/工具中使用类似的方法。

方法是使用(\d)捕获一个数字,然后使用\1*匹配相同的所有反向引用。

答案 2 :(得分:1)

你可以这样做,

> str = "11231114"
=> "11231114"
> str1 = str.gsub(/(?<=(\d))(?!\1)/, "*")
=> "11*2*3*111*4*"
> str1.split('*')
=> ["11", "2", "3", "111", "4"]

答案 3 :(得分:1)

Ruby 2.2中有slice_when

"11231114".chars.slice_when { |x, y| x != y }.map(&:join)