我有一个字符串输入,我想在,
和00
之间插入11
,如下例所示。
input1 = '00011010100011101'
desired_result1 = '0,0,01,101010,0,01,1,101'
input2 = '11010111101010000001011'
desired_result2 = '1,10101,1,1,101010,0,0,0,0,0101,1'
我尝试了以下但是没有给我我想要的东西。
input1.gsub(/00/,'0,0').gsub(/11/,'1,1')
=> "0,001,101010,001,1101"
我感谢任何投入。
注意此问题的答案可能会在以后默默使用here而不会获得积分。
答案 0 :(得分:5)
这样做的一种方法是使用lookbehind((?<=...)
)。这是一个无法捕获的零宽度断言,因此您可以匹配1之前的1或0之前的0:
input.gsub(/(?<=1)1|(?<=0)0/, ',\0')
\0
是匹配的字符串,即1
或0
,但不是前面的1
或0
。
答案 1 :(得分:3)
input.gsub(/(00+|11+)/) { |m| m.split(//).join(',') }
# => "0,0,01,101010,0,01,1,101"
答案 2 :(得分:3)
看,马,没有gsub,没有正则表达式!
def insert_commas(str)
([str[0]] + str.chars.each_cons(2).map { |a,b| a==b ? ','+b : b }).join('')
end
insert_commas('00011010100011101')
#=> "0,0,01,101010,0,01,1,101"
insert_commas('11010111101010000001011')
#=> "1,10101,1,1,101010,0,0,0,0,0101,1"
答案 3 :(得分:2)
Generaling @ spickermann的解决方案:
input1.gsub(/(.)\1+/) { |m| m.split('').join(',') }
# => "0,0,01,101010,0,01,1,101"