如何让顺序变成无序?
import repassword = re.compile(r'(\d+)(+)(+)(.+){5,}')
mo = password.search('8Gm12345')
print(mo.group())
这是一个验证密码强度的程序,密码必须包含:至少一个数字,至少一个大写和一个小写字母,长度必须大于8.
我写的这个正则表达式只能是按照“数字,大写,小写,还有五个以上的任意字符”。
问题:如何让这个顺序的匹配变为无序的呢?也就是说不用先数字,然后大写。。。,只要有数字和大写小写字母就行。 正则不是万能的 本帖最后由 灰晨 于 2021-6-30 18:35 编辑
r'(?=.*?)(?=.*?)(?=.*?).{8,}' import re
password = re.compile(r'{8,}')
mo = password.search('8Gm12345')
if mo:
print(mo.group())
else:
print("密码不符合要求。") hrpzcf 发表于 2021-6-30 18:45
你这样还是有问题的,这样密码里就只能是数字和大小写了,有特殊字符(#¥%)之类的就不符合了
而且没有满足至少有一个,我密码全是数字也能过的 hrpzcf 发表于 2021-6-30 18:45
谢谢 灰晨 发表于 2021-6-30 18:32
r'(?=.*?)(?=.*?)(?=.*?).{8,}'
你这里的=是啥意思啊? 灰晨 发表于 2021-6-30 18:32
r'(?=.*?)(?=.*?)(?=.*?).{8,}'
能麻烦你讲解一下整个正则表达式的意思吗?有点看不懂 灰晨 发表于 2021-6-30 18:51
你这样还是有问题的,这样密码里就只能是数字和大小写了,有特殊字符(#¥%)之类的就不符合了
而且没有 ...
哦,没注意看,还以为只要大小写和数字 本帖最后由 灰晨 于 2021-7-1 11:17 编辑
(?=a) 表示我们需要匹配某样东西的前面。 (?=a)非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。------官方
(?!a) 表示我们需要不匹配某样东西。
(?:a) 表示我们需要匹配某样东西本身。
(?<=a) 表示我们需要匹配某样东西的后面。
(?<!a) 表示我们需要不匹配某样东西,与(?!a)方向相反。
a=.*?
.表示除\n之外的任意字符
*表示匹配0-无穷
后边多一个?表示懒惰模式。
必须跟在*或者+后边用
匹配到第一个就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。
(?=.*?)
匹配【A-Z】前面的字符,说明至少要有一个【A-Z】,不然匹配失败
该匹配不需要获取供以后使用。
即匹配a前面的字符,多少个无所谓,0个也行,但要要a,也就是【A-Z】,而且只是匹配但不获取
(?=.*?)(?=.*?)(?=.*?)
即匹配前面的字符,说明有
.{8,}
匹配 . 8次
.表示除\n之外的任意字符
页:
[1]