Почему мое регулярное выражение не работает для проверки символов - PullRequest
1 голос
/ 09 ноября 2019

Здесь мой (?=.*[a-z]{2}) явно проверяет явно 2 маленьких символа. но не мог взять его

import re
char = 'Massas23#'
if re.search(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print ("match")
else:
    print ("Not Match")

Мой выход Match и ожидаемый Not Match

Ответы [ 2 ]

3 голосов
/ 09 ноября 2019

Может быть, тогда может работать

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$

.

(?!.*[a-z]{3})

означает, что более трех последовательных строчных букв не допускаются.

Демонстрация 1

Тест

import re

char = 'Massas23#'

if re.search(r"^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print("match")
else:
    print("Not Match")

Если вы хотите упростить / изменить / изучить выражение, это объясняется вверхняя правая панель regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here


Я думаю, мы не пытались сопоставить MAsSa23#, если вы хотите сопоставитьчто,

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$

сделает это.

Демо 2

2 голосов
/ 09 ноября 2019

Вы можете опустить строчные буквы в классе символов и затем точно сопоставить 2 строчных буквы az.

Вы можете использовать контраст , используя отрицательные классы символов, например, сопоставляя не цифру.

^(?=.{6,12}$)(?=[^\d\s]*\d)(?=[^A-Z\s]*[A-Z])(?=[^@#$\s]*[@#$])[A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*$
  • ^ Начало строки
  • (?=.{6,12}$) Подтвердить 6 - 12 символов
  • (?=[^\d\s]*\d) Утвердить цифру
  • (?=[^A-Z\s]*[A-Z]) Установить верхний регистр символов
  • (?=[^@#$\s]*[@#$]) Установить специальный символ
  • [A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]* Совпадение 2 строчными буквами az
  • $ Конец строки

Regex demo

Обратите внимание, что

  • [\d] не должно быть в квадратных скобках
  • [\w\d@#$]\w также соответствует \d, поэтому его можно опустить в классе символов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...