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
|