194 votes

Remplacer les instances d'un caractère dans une chaîne de caractères

Ce code simple qui essaie simplement de remplacer les points-virgules (à des positions i-spécifiées) par des deux-points ne fonctionne pas :

for i in range(0,len(line)):
     if (line[i]==";" and i in rightindexarray):
         line[i]=":"

Il donne l'erreur

line[i]=":"
TypeError: 'str' object does not support item assignment

Comment puis-je contourner ce problème en remplaçant les points-virgules par des deux-points ? L'utilisation de replace ne fonctionne pas car cette fonction ne prend pas d'index - il peut y avoir des points-virgules que je ne veux pas remplacer.

Exemple

Dans la chaîne de caractères, je peux avoir un nombre quelconque de points-virgules, par exemple "Hei der ! ; Hello there ;! ;".

Je sais quels sont ceux que je veux remplacer (j'ai leur index dans la chaîne). L'utilisation de replace ne fonctionne pas car je ne suis pas en mesure d'utiliser un index avec lui.

0voto

Matt Farguson Points 325

J'ai écrit cette méthode pour remplacer des caractères ou des chaînes de caractères à une instance spécifique. Les instances commencent à 0 (cela peut facilement être changé en 1 si vous changez l'argument optionnel inst en 1, et la variable test_instance en 1.

def replace_instance(some_word, str_to_replace, new_str='', inst=0):
    return_word = ''
    char_index, test_instance = 0, 0
    while char_index < len(some_word):
        test_str = some_word[char_index: char_index + len(str_to_replace)]
        if test_str == str_to_replace:
            if test_instance == inst:
                return_word = some_word[:char_index] + new_str + some_word[char_index + len(str_to_replace):]
                break
            else:
                test_instance += 1
        char_index += 1
    return return_word

0voto

shabgard tanha Points 1

Vous pouvez le faire :

string = "this; is a; sample; ; python code;!;" #your desire string
result = ""
for i in range(len(string)):
    s = string[i]
    if (s == ";" and i in [4, 18, 20]): #insert your desire list
        s = ":"
    result = result + s
print(result)

0voto

Kasem777 Points 191
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]

usernames = []

for i in names:
    if " " in i:
        i = i.replace(" ", "_")
    print(i)

Sortie : Joey_Tribbiani Monica_Geller Chandler_Bing Phoebe_Buffay

0voto

Joselin Ceron Points 85

Mon problème était que j'avais une liste de numéros, et je veux seulement remplacer une partie de ce numéro, alors je fais ceci :

original_list = ['08113', '09106', '19066', '17056', '17063', '17053']

# With this part I achieve my goal
cves_mod = []
for i in range(0,len(res_list)):
    cves_mod.append(res_list[i].replace(res_list[i][2:], '999'))
cves_mod

# Result
cves_mod
['08999', '09999', '19999', '17999', '17999', '17999']

0voto

jorgems Points 1

Encore plus simple :

input = "a:b:c:d"
output =''
for c in input:
    if c==':':
        output +='/'
    else:
        output+=c
print(output)

sortie : a/b/c/d

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X