Вы можете попробовать
\D\d{5}\D
или, может быть,
\b\d{5}\b
Я не уверен, что python обрабатывает контуры строк и пробелы там.
Я считаю, что ^\d{5}$
не сработает для вас, так как вы, вероятно, захотите получить числа, которые находятся где-то внутри другого текста.
Официального руководства не существует, так как эмитенты кредитных карт могут сами выбирать, когда истекает срок действия выпускаемых ими карт. На самом деле они выпускают карты на все более длительные сроки. Если вы пытаетесь определить, как далеко в будущем вам следует размещать даты истечения срока действия, сделайте выбор в пользу безопасной стороны и предоставьте своим клиентам много лет на выбор. Таким образом, вы обеспечите будущее своего приложения.
К вашему сведению, многие эмитенты кредитных карт не используют срок действия при определении того, одобрять или нет покупку по кредитной карте. Так что если вы беспокоитесь о том, что указана неправильная дата, процессор в конечном итоге будет иметь окончательное решение о том, одобрена транзакция или нет, поэтому я бы не стал беспокоиться об этом.
Июль 2017: Только что был конечный пользователь с картой, срок действия которой истекал почти через 50 лет.
Я бы либо динамически добавил + 15-20 лет к году текущей даты, либо предоставил текстовое поле для ввода года (которое лично я считаю быстрее набирать две цифры, чем для прокрутки списка лет).