REGEX соответствует 10 цифрам и должен содержать число 4 - PullRequest
2 голосов
/ 27 апреля 2020

Я пытался написать регулярное выражение для соответствия 10-значному числу, и оно должно содержать число 4. Например:

s=['123456abc','abcisjgm','1234567895','1231231231']
for i in s:
    if re.findall(r'[4]\d{9}\b',i):
        print(i, "is valid")
    else:
        print(i, "is not valid")

Вывод, как показано ниже,

123456abc is not valid
abcisjgm is not valid
1234567895 is not valid -----> this should be valid
1231231231 is not valid

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Другой способ - проверить 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
1 голос
/ 27 апреля 2020

Вы можете использовать следующий шаблон с re.search:

^(?=\d*?4)\d{10}$

См. regex demo .

  • ^ - начало строки
  • (?=\d*?4) - должно быть 4 после 0 или более цифр, как можно меньше
  • \d{10} - десять цифр
  • $ - конец строка.

См. Python демо :

import re

s=['123456abc','abcisjgm','1234567895','1231231231']

for i in s:
    if re.search(r'^(?=\d*?4)\d{10}$', 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...