正则匹配与长度3的子串重复

构造一个检查函数 checkLegal

1)生成一个长度为3的所有子串序列(因为长度大于4的相同子串,必定存在长度3的相同子串); 2)if len(set(sub)) < len(sub):return False python 用set去重,判断长度就可以知道是否有重复; 3)类型用正则匹配,如果匹配到目标数据格式 type_ += 1; 4)最后return True if type_ >= 3 else False; 5)处理多行输入输出,调用该函数即可。

def checkLegal(pswd):    
    if len(pswd) <= 8:return False        
    else:
        #最大重复子串长度2+
        sub = []
        for i in range(len(pswd)-2):
            sub.append(pswd[i:i+3])
        if len(set(sub)) &lt; len(sub):return False
        #check type
        type_ = 0
        import re
        Upper = '[A-Z]'
        Lowwer = '[a-z]'
        num = '\d'
        chars = '[^A-Za-z0-9]'
        patterns = [Upper, Lowwer, num, chars]
        for pattern in patterns:
            pw = re.search(pattern, pswd)
            if pw : type_ += 1
        return True if type_ >= 3 else False
while True:
    try:
        pswd = input()
        print('OK' if checkLegal(pswd) else 'NG')
    except:
        break
全部评论
题目要求 【3.不能有长度大于2的不含公共元素的子串重复】,如果是 ababa 这种,你好像会算成重复的,但是按题意这种应该算不含重复子串吧,毕竟这种的应该算是含有公共元素的子串重复
7 回复 分享
发布于 2022-02-22 17:00
[^A-Za-z0-9_]这个匹配的是非大小写字母数字及下划线,应该不对吧。应该是[^0-9a-zA-Z\s]这样吧,排除掉空格
1 回复 分享
发布于 2022-07-15 14:10
这招好用
点赞 回复 分享
发布于 2024-06-13 12:15 广西
chars="\W"是否可行
点赞 回复 分享
发布于 2023-03-18 23:21 广东
[^A-Za-z0-9 \f\n\r\t\v]
点赞 回复 分享
发布于 2022-01-03 01:38
你好,可以请教一下正则里的下划线_代表哪些字符吗
点赞 回复 分享
发布于 2021-11-07 20:07
第二步有误把,判断长度>2 重复,不代表每对长度都是3,第7行规定了每个字串长度为3,应使用第二个forloop
点赞 回复 分享
发布于 2021-10-14 02:06

相关推荐

不放弃的小鱼干很洒脱:好可爱的离职理由
点赞 评论 收藏
分享
评论
70
3
分享

创作者周榜

更多
牛客网
牛客企业服务