Несколько других способов:
1: Обрезка строки и использовать String#scan
def some_method(str, c)
str.gsub(/^[^#{c}]+|[^#{c}]+$/,"").scan /[^#{c}]+/
end
some_method("00990099", "9") #=> ["00"]
some_method("00XXX00XX0X00X00", "X") #=> ["00", "0", "00"]
some_method("0000", "9") #=> []
some_method("9999", "9") #=> []
2: Разделение на группы и использовать Enumerable#each_cons
def some_method(str, c)
str.gsub(r) split(/(#{c}+)/)
.each_cons(3)
.with_object([]) { |(_,s,_),a| a << s unless s =~ /#{c}/ }
end
some_method("00990099", "9") #=> ["00"]
some_method("00XXX00XX0X00X00", "X") #=> ["00", "0", "00"]
some_method("0000", "9") #=> []
some_method("9999", "9") #=> []
Обратите внимание, что при использовании, #{c}+
в регулярном выражении должно быть в группе захвата, чтобы сохранить группы c
, с помощью которых разбивается str
.
Это неверно для второй тестовой строки в вашей демонстрационной ссылке. –
Правило Regex верное. Это связано с несколькими линиями в демо. [См. Здесь снова с таким же регулярным выражением] (http://rubular.com/r/meeO45qVyj) – anubhava
hmm. Еще одна проблема. –