Вы должны сначала сказать, что он может иметь 3 пробела, а затем отрицать существование еще трех пробелов, например:
^([0-9]+)(\s{0,3})([^ ]{3})([0-9]*)$
^ ([0-9] +) = Принимает один илибольше цифр в начале вашей строки.
(\ s {0,3}) = Принимает ноль или до трех пробелов.
([^] {3}) = Запретитьследующие 3 пробела после разрешенных пробелов.
([0-9] *) = Принимает любое число после пробелов до конца вашей строки.
Или:
^([0-9]+)(\s{0,3})(?!\s+)([0-9]*)$
Единственное изменение здесь состоит в том, что после трех разрешенных пробелов он больше не будет принимать пробелы (мне особенно нравится этот второй вариант, потому что он более читабелен).
Надеюсь, это поможет.