Я не уверен, что я правильно понял ваш ответ на 100%, но я понял его следующим образом: написать регулярное выражение, соответствующее строке "с ровно 4 цифрами в качестве первых 4 символов, все из которых отличаются, и никаких других цифр вstring "
Этого можно достичь с помощью негативных предупреждений и обратных ссылок (и групп).Регулярное выражение работает следующим образом:
Таким образом, у нас должна быть цифра \d
.Затем другая цифра \d
, которая не совпадает с первой [match] (?!\1)
.Затем другая цифра \d
, которая не совпадает с предыдущими совпадениями (?!(\1|\2))
и т. Д.
Вот полное регулярное выражение с пробелами, добавленными для удобства чтения:
/^
(\d)
(?!\1)(\d)
(?!(\1|\2))(\d)
(?!(\1|\2|\3))(\d)
\D*
$
/x
Если вынеобходимо, чтобы он совпадал со всей строкой и некоторыми определенными позициями, вы можете удалить ^
/ $
и посыпать \D
(не цифрой) такими квантификаторами, как *
, +
из {10}
при необходимости.
PS: я предлагаю прочитать этот сайт https://www.regular -expressions.info / и после прочтения всего этого и некоторой практики (кстати, ответы на вопросы здесь на StackOverflow - хороший способ потренироватьсяЯ обещаю, что вы станете гуру регулярных выражений.
PPS: В реальном проекте я бы вообще реализовал это без регулярных выражений.
digits = [c for c in str if c.isdigit()]
return len(digits) == 4 and len(set(digits)) == 4