Учитывая строку
s = 'abcd 1234 efghijk 56789 nope 0987 blah blah 2010 hmmm'
Должно ли быть 2 или 3 совпадения (учитывая, что подстрока "2010 ммм" не заканчивается годом)? Я предполагаю, что вы хотите соответствовать этому (если нет, удалите |\Z
из регулярного выражения).
s.scan(/\b\d{4}\b.+?(?=\b\d{4}\b|\Z)/)
# => ["1234 efghijk 56789 nope ", "0987 blah blah ", "2010 hmmm"]
Но, как вы говорите, вы не заботитесь о сохранении чисел:
s.scan(/(?<=\d{4}).+?(?=\b\d{4}\b|\Z)/)
# => [" efghijk 56789 nope ", " blah blah ", " hmmm"]