问题:要求密码不能有相同长度大于2的子串重复,验证密码的有效性。
思路:使用正则表达式匹配目标字符串,匹配是否存在重复的子串,如果匹配结果不为空,即不合格。
用到了 1.正则表达式的分组匹配;2.引用分组匹配匹配到的字符串的 知识。
代码:
import re
password_str = "abcef123abc"
ret = re.findall(r"(.{3,}).*\1", password_str)
>>>print(ret)
['abc']
说明:
1)(.{3,}):括号中的字符被正则表达式视为一个分组,即分组匹配,题解代表任意字符出现3次以上作为一个分组;
2)\num:即为引用子模式num匹配到的字符串;num为子模式的编号. (分组匹配也可称为子模式匹配)。子模式编号:整个正则表达式作为一个模式编号为“0”,其余子模式从左至右从 1 - 99 依次编号,最大编号为99;
3).* : 代表任意字符出现0次或多次,因为相同子串可能相连也可能被其他字符割开;
连起来就是:匹配任意字符组成的长度至少为3的字符子串出现2次的结果。也就可实现“不能有相同长度大于2的子串重复”密码的验证。