|
发表于 2021-9-5 13:24:03
|
显示全部楼层
- str1 = '''ABSaDKSbRIHcRHGcdDIF'''
- countA = 0 # 统计前边的大写字母
- countB = 0 # 统计小写字母
- countC = 0 # 统计后边的大写字母
- length = len(str1)
- for i in range(length):
- if str1[i] == '\n':
- continue
- # 统计大写字母个数
- if str1[i].isupper():
- # 如果出现小写字母,就加 C 统计后面
- if countB:
- countC += 1
- # 未出现小写字母,就加 A 统计前面的
- else:
- countC = 0
- countA += 1
- # 如果为小写字母
- if str1[i].islower():
- # 只要不是开始就三个大写字母,或者前面的组合为 小大大大,就全部清零重计
- if countA != 3:
- countA = 0
- countB = 0
- countC = 0
- # 满足前面仅有三个大写字母
- else:
- # 如果前面已经出现 小大大大小 的组合,即小写字母已经出现过一次,后面未出现三个大写字母情况下(详见 40 行以后,如果 C=3,B 和 C 会进行清零),又出现小写字母
- if countB:
- countA = 0
- countB = 0
- countC = 0
- # 如果前面已经出现 小大大大 的组合后,出现小写字母,就 B 加一并标记该字母,因为可能是密码
- else:
- countB = 1
- countC = 0
- target = i
- # 如果已经满足 小大大大小大大大 的组合,进行分情况判断
- if countA == 3 and countC == 3:
- # 如果后面第四位还存在并且为大写,则 B和C 清零
- if i+1 != length and str1[i+1].isupper():
- countB = 0
- countC = 0
- # 如果后面第四位不存在(字符串结束了),或者为小写,则标记的小写字母为密码
- else:
- print(str1[target], end='')
- countA = 3
- countB = 0
- countC = 0
复制代码 |
|