Regex соответствует цифрам определенной длины

Я хочу сопоставить 15-значное число (как часть большей строки регулярного выражения). Прямо сейчас у меня есть

\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d

но я чувствую, что должен быть более чистый способ сделать это.

Ответы

Ответ 1

Если ваш язык регулярных выражений совместим с Perl: \d{15}.

Трудно сказать, как обрабатывать ребра (чтобы вы случайно не захватили лишние цифры), не зная внешнего контекста, в котором этот фрагмент будет использоваться. Окончательное контекстно-независимое решение таково:

(?:(?<!\d)\d{15}(?!\d))

Вы можете поместить это в середину любого регулярного выражения, и он будет соответствовать (и только соответствует) последовательности ровно 15 цифр. Это, однако, довольно неудобно и обычно не нужно. Более простая версия, предполагающая не-буквенно-цифровые границы (например, пробелы вокруг цифр), такова:

(?:\b\d{15}\b)

Но это не сработает, если буквы сразу предшествуют или следуют за последовательностью.

В обоих случаях выше внешний (?:... ) является просто конструкцией брекетинга, чтобы избежать проблем с приоритетом с окружающим регулярным выражением. Требуется ли это также зависит от контекста.

Ответ 2

Обычно вы можете использовать диапазоны следующим образом:

\d{4,7}

что означает минимум 4 и максимум 7 цифр. Для вашего конкретного случая вы можете использовать вариант с одним аргументом, \d{15}.

Обе эти формы поддерживаются в регулярных выражениях Python - найдите текст {m,n} по этой ссылке.

И имейте в виду, что \d{15} будет соответствовать пятнадцати цифрам в любой точке строки, включая 400-значное число. Если вы хотите, чтобы у него было только пятнадцать, вы используете что-то вроде:

^\d{15}$

который использует стартовые и конечные якоря, или

^\D*\d{15}\D*$

который позволяет произвольно не цифрам с обеих сторон.

Ответ 3

У меня есть два способа ограничить число.

используя len,

num = 1234
len(str(num)) <= 4

Этот вывод будет True/False.

используя регулярное выражение,

import re
num = 12324
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num))

Вывод будет объектом регулярного выражения или Нет.