Другой способ - проверить 10 цифр, используя положительный прогноз.
Совпадение цифр, кроме 4, затем совпадение 4 с последующими необязательными цифрами.
^(?=\d{10}$)[0-35-9]*4\d*$
^
Начало строки (?=\d{10}$)
Утверждение 10 цифр [0-35-9]*
Соответствие 0+ раз в раз git, за исключением 4 4
Соответствие требуемому 4 \d*
Соответствие 0+ раз в раз git $
Конец строки
Regex demo | Python demo
Если это может встречаться в строке несколько раз, вы также можете использовать границы слов \b
Пример кода
import re
s=['123456abc','abcisjgm','1234567895','1231231231']
for i in s:
if re.findall(r'\b(?=\d{10}$)[0-35-9]*4\d*\b',i):
print(i, "is valid")
else:
print(i, "is not valid")
Выход
123456abc is not valid
abcisjgm is not valid
1234567895 is valid
1231231231 is not valid