Другой вариант:
\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}
Это почти так же, как и все остальные. Единственный интересный бит - это часть \s*?
, которая будет лениво соответствовать пробелам между словами, поэтому вы не получите лишних пробелов после последовательности из 4 слов. \b
перед тем, как он гарантирует, что есть хотя бы один пробел (или другой разделитель после последнего слова, поэтому !a b c d!
будет соответствовать)