如果字符串中的字符与哈希表匹配,则替换这些字符并循环使用stirng

2024-10-04 03:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我现在的处境:

CharList = []
text = "xxxxAAaaaSSSxxx"
PasswordSubHT = {"a":"@" , "A":"4" , "S":"5"}
for LETTER in text:
    CharList.append(LETTER)
for EL in CharList:
    if EL in PasswordSubHT:
        print(text.replace(EL,str(PasswordSubHT[EL])))

我得到的是:

^{pr2}$

这就是我想要得到的:

xxxx4AaaaSSSxxx
xxxx44aaaSSSxxx
xxxxAA@aaSSSxxx
xxxxAA@@aSSSxxx
xxxxAA@@@SSSxxx

我想把字符替换成一个字符,这就是为什么我要把字符串管道到一个数组。这样做对吗?在


Tags: textinforif字符elreplaceprint
3条回答

您可以使用regex:

import re
text = "xxxxAAaaaSSSxxx"
PasswordSubHT = {"a":"@" , "A":"4"}
combos = {a:iter([b*i for i in range(1, len(re.findall(a, text))+1)]) for a, b in PasswordSubHT.items()}
new_results = [[re.sub('{}+'.format(i), next(combos[i[0]])+i[c:], text) for c, i in enumerate(b)] for b in re.findall('|'.join(map(lambda x:'{}+'.format(x), PasswordSubHT.keys())), text)]
final_results = [i for b in new_results for i in b]

输出:

^{pr2}$

检查一下,告诉我:

text = "xxxxAAaaaSSSxxx"
PasswordSubHT = {"a":"@" , "A":"4" , "S":"5"}

for letter in text:
    if letter in PasswordSubHT.keys():
        text = text.replace(letter, str(PasswordSubHT[letter]))
        print(text)

注意:
replace(x, y)将替换文本中的所有x。如果您想一次只替换一个字符,请添加count参数=1:text = text.replace(letter, str(PasswordSubHT[letter]), 1)

Python string^{}方法用字符串中的新字母替换字母的所有实例。例如,在第一个过程中,它跳过所有字母直到A,然后看到A在子列表中,并将字符串中A的所有实例替换为4。然后它移动到下一个字符,在这一点上它变成了4而不是A。 Python字符串是不可变的。所以你不能真的把它们捡起来然后在中间换字母。 您可以将这个字符串转换成一个列表。char_list = list(text)。然后你可以迭代这个并保留一个计数器。在

for char in char_list:
   counter = counter + 1
   if char in PassSubList:
      char_list[counter] = PassSubList[char]
 return_list = ''.join(char_list)

相关问题 更多 >