Может быть, тогда может работать
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$
.
(?!.*[a-z]{3})
означает, что более трех последовательных строчных букв не допускаются.
Тест
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 визуализирует регулярные выражения:
Я думаю, мы не пытались сопоставить MAsSa23#
, если вы хотите сопоставитьчто,
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$
сделает это.