1
votes

Le remplacement de chaîne en python remplace la chaîne entière

Lorsque je remplace la chaîne, j'obtiens une erreur. Par exemple: ma chaîne est my_string = '15: 15 '. Je veux remplacer 15 qui est après les deux-points à 30 . Par exemple, j'ai besoin de '15: 30 '. Lorsque j'essaie de remplacer la chaîne, cela fonctionne bien pour toutes les autres valeurs, par exemple, '09: 15 ', '09: 20' .

J'ai essayé :

my_string = '15:15'
my_new_string = my_string.replace(my_string[-2:], '30')

my_string = '15:15'
my_new_string = my_string.replace(my_string[-2:], '30')

Ce que j'attends est 15:30 mais ma sortie réelle est 30:30


0 commentaires

3 Réponses :


0
votes

my_new_string = my_string.replace (my_string [-2:], '30') vous obtient 30:30 , car vous remplacez toutes les occurrences de 15 -> 15:15 deviendra 30:30 .

Vous pouvez utiliser str.split et str.format pour obtenir votre nouvelle chaîne:

15:30

Impressions:

my_string = '15:15'

my_new_string = '{}:{}'.format(my_string.split(':')[0], '30')

print(my_new_string)


0 commentaires

0
votes

C'est le comportement attendu. Regardez ce que signifient les arguments pour str.replace () :

my_new_string = my_string[:-2] + '30'

Il ne remplace pas une sous-chaîne, mais plutôt toutes les occurrences de ce que vous passez comme premier paramètre.

En appelant my_string.replace (my_string [-2:], ' 30 ') vous appelez essentiellement '15: 15'.replace ('15', '30') - qui remplacera toutes les occurrences de "15" par "30" vous vous retrouverez donc avec '30:30' .

Si vous voulez remplacer les deux derniers caractères, inversez votre logique: gardez tout jusqu'aux deux derniers caractères et puis ajoutez la chaîne '30' que vous voulez à la fin:

replace(...)
    S.replace(old, new[, count]) -> string

    Return a copy of string S with all occurrences of substring
    old replaced by new.  If the optional argument count is
    given, only the first count occurrences are replaced.


0 commentaires

0
votes

Lorsque vous utilisez my_string [-2:] , vous obtenez la chaîne '15: '. Ensuite, lorsque vous remplacez la fonction string.replace , toutes les occurrences de 15: par 3, vous donnant 3030.

À la place, vous pouvez utiliser my_string [2:] pour récupérez la chaîne «: 15» et remplacez-la par «: 30». Si vous n'incluez pas les deux-points, vous remplacerez les deux occurrences de 15 et obtiendrez '30: 30 '

my_new_string = my_string.replace(my_string[:-2], ':30')


0 commentaires