8
votes

Comment remplacer une partie d'une chaîne en python?

Comment remplacer un ensemble de caractères à l'intérieur d'une autre chaîne de python?

Voici ce que j'essaie de faire: Disons que j'ai une chaîne 'abcdefghijkl' et que je veux remplacer le 2-D du symbole de fin (k) avec A. Je reçois une erreur: xxx

donc, la question suivante: y a-t-il un moyen élégant de remplacer (substitut) avec une chaîne de symboles à l'intérieur d'une autre chaîne à partir de la position spécifiée? Quelque chose comme: xxx

Quel serait un code de force non brute pour le STI?


5 Réponses :


11
votes
>>> aa = 'abcdefghijkl'
>>> changed  = aa[0:-2] + 'A' + aa[-1]
>>> print changed
abcdefghijAl

1 commentaires

Vous manquez le caractère «L» traînant.



15
votes

Si c'est toujours la même position que vous remplacez, vous pouvez faire quelque chose comme: xxx pré>

dans le cas général, vous pouvez faire: p>

>>> s = "abcdefghijkl"
>>> repl_str = "A"
>>> rindex = -4 #Start at 4th character from the end
>>> repl = 3 #Replace 3 characters
>>> s = s[0:rindex] + (repl_str * repl) + s[rindex+repl:]
>>> print s
abcdefghAAAl


1 commentaires

Et si la substitution est plus longue que 1 symbole? 'AAA' au lieu de "A". Et j'ai besoin de remplacer trois symboles dans la chaîne d'origine (pas une avec trois, mais la même longueur que la substitution).



5
votes

Vous devez couper et instancier une nouvelle chaîne car les chaînes sont immuables: xxx


0 commentaires

4
votes

Une autre façon de faire ceci:

>>> from UserString import MutableString
>>> s = MutableString( "zdfgzbdr " )
>>> s
'zdfgzbdr '
>>> s[1:5]
'dfgz'
>>> s[1:5] = "xxxx"
>>> s
'zxxxxbdr '


2 commentaires

Achemandez, vous avez toujours byTarray


@gnibbler je suis émerveillé. Je ne savais pas que ce type existe, merci.



3
votes

Répondre Commentaire de l'autre post:

Pour effectuer une substitution de trois caractères directement avec des chaînes (voir aussi la poste byTeArray), vous pouvez faire une partition avec la séquence, surtout si vous ne connaissez pas la position sans recherche: P >

aa = 'abcdefghijkl'
replace = 'def'
withstring = 'QRS'
newstr,found,endpart = aa.partition(replace)

if found:
    newstr+=withstring+endpart
    print newstr
else:
    print "%r string is not in %r" % (replace,aa)


0 commentaires