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))
Вывод будет объектом регулярного выражения или Нет.