Ваш шаблон не учитывает обязательное пространство.Вы можете использовать положительный прогноз, чтобы утверждать, что есть хотя бы один пробел, сопоставив 0+ раз с непробельным символом, а затем с пробелом (?=\S* )
Поскольку вы используете .*
для сопоставления с любым символом, выможет также использовать отрицательный класс символов [^a-zA-Z\r\n]
, чтобы не совпадать с a-zA-Z или переводом строки, а затем совпадать с a-zA-Z
^[0-9](?=\S* )[^a-zA-Z\r\n]*[a-zA-Z][^a-zA-Z\r\n]*[a-zA-Z].*$
Regex demo
Вы также можете использовать положительный прогноз, чтобы 2 раза утверждать символ a-zA-Z.Затем сопоставьте один пробел и оставшуюся часть строки.
^[0-9](?=(?:[^a-zA-Z\r\n]*[a-zA-Z]){2})\S* .*$
Пояснение
^
Начало строки [0-9]
Совпадение с цифрой (?=
Позитивный прогноз, утверждаем, что справа (?:[^a-zA-Z\r\n]*[a-zA-Z]){2}
Повторяющаяся группа, совпадение 2 раза a-zA-Z
)
Закрыть положительный прогноз \S* .*
Соответствовать 0+ раз символу, не являющемуся пробелом, затем обязательный пробел, за которым следует поиск любого символа, кроме новой строки $
Подтвердить конец строки
Regex demo