一個密碼藏在在一個字符串中,密碼的埋藏地點符合以下規(guī)律:
- 每位密碼為單個小寫字母
- 每位密碼的左右兩邊均有且只有三個大寫字母
首先埋酬,考慮的是很簡單的正則表達式:
import re
S = '密碼字符串'
rs = re.findall(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]',S)
print(''.join(rs))
但是上述方法有缺陷哨啃,在這里給出一個不滿足條件的例子:
test = 'AACcqDEDiEEEpEEqEEElEEEoFDFvLLDsKbLDKeOOO'
正確的密碼應該為:ilove
但上述代碼的運行結果為:il
為了解決上述問題,重新整理思路写妥,最終的代碼如下拳球,已經添加了注釋,這里就不詳細解釋了珍特。
import re
test = 'AACcDEDiEEEpEEqEEElEEEoFDFvLLDsKbLDKeOOO'
# test = 'cAACVcccccccCDDeCCCfCC'
code = ''
while test:
# 確定字符串中是否有小寫字母
if not test.isupper():
# 獲取原始字符串第一個小寫字母
first_low_character = re.findall('[a-z]', test)[0]
# 獲取第一個小寫字母的索引
first_low_index = test.index(first_low_character)
# 判斷第一個小寫字母前面是否恰好有 3 個大寫字母
if first_low_index == 3:
# 將 AAAb 刪除 更新字符串
test = test[first_low_index + 1:]
# 檢查更新后的字符串是否為空 并確定是否有小寫字母
if test and not test.isupper():
# 獲取更新后的字符串第一個小寫字母
two_low_character = re.findall('[a-z]', test)[0]
# 獲取更新后的字符串第一個小寫字母的索引
two_low_index = test.index(two_low_character)
# 判斷更新后的字符串第一個小寫字母 前面 是否恰好有 3 個大寫字母
# 也就是
# 判斷原始字符串第一個小寫字母 后面 是否恰好有 3 個大寫字母
# 上面這兩句話 意義相同
if two_low_index == 3:
# 存儲滿足條件的小寫字母
code += first_low_character
else:
# 更新字符串
test = test[two_low_index + 1:]
else:
# # 判斷更新后的字符串恰好有 3 個大寫字母
if len(test) == 3:
# 存儲滿足條件的小寫字母
code += first_low_character
else:
# 更新字符串
test = test[first_low_index + 1:]
else:
# 字符串中已經沒有小寫字母 直接退出循環(huán)
break
print(code)
if code == 'cilove':
print('測試成功祝峻!')
else:
print('測試失敗扎筒!')