Это правда, что наиболее ограничивающее условие в настоящее время находится в конце, но если бы оно было в начале, вы бы не смогли использовать утверждения с предварительным просмотром (вместо этого вам понадобятся утверждения с обратным взглядом).
Но утверждения за кадром должны быть fixed-width (есть некоторые исключения, например, в Java), поэтому вы не можете использовать их здесь.
Однако есть одна вещь, которую вы могли бы сделать, - это использование прогнозного утверждения для основного условия.
Итак, это ваше текущее решение с небольшими улучшениями ( demo ):
(?=([^0]*0){2})(?=([^1]*1){2})(?=[^4]*4)(?=([^6]*6){3})(?=([^7]*7){2})[01467]{10}
И это версия с дополнительным прогнозом ( демо ) ( редактировать: Я сделал группы внутри прогнозирования без захвата ):
(?=[01467]{10})(?=(?:[^0]*0){2})(?=(?:[^1]*1){2})(?=[^4]*4)(?=(?:[^6]*6){3})(?=(?:[^7]*7){2}).{10}