Comment utiliser string.replace () en python 3.x

280

Le string.replace () est obsolète sur python 3.x. Quelle est la nouvelle façon de procéder?

Dewsworld
la source
11
FWIW, j'ai eu la même confusion. Google "python string replace" m'a amené aux anciennes fonctions de chaîne obsolètes en python 2.7. À mon humble avis, cette section pourrait utiliser une grande case en gras expliquant "string.xxx ()" vs "xxx (string)", et dirigeant les gens vers les méthodes de chaîne non obsolètes, par exemple vers docs.python.org/library/stdtypes.html # string-methods
ToolmakerSteve
8
La documentation Python est une pagaille absolue étant donné qu'elle est présentée comme une langue première idéale. Assez souvent, les choses sont là, mais à cause de la mauvaise façon dont elles sont organisées, elles ne sont souvent pas bien indexées par les moteurs de recherche ou même leur propre site. Regardez le lien de ToolMakerSteve, les fonctions de chaîne de base sont intégrées aux types standard. Cela ne se produit pas lorsque vous recherchez des fonctions de chaîne.
Andrew S
10
Pour être clair: string.replace () n'est en fait pas déconseillé sur Python 3.
sboggs11
2
C'est dans les types intégrés
JerodG
1
Parfois, les gens écrivent "str.replace" quand ils signifient [votre variable de chaîne] .replace. Parce que «str» est également le nom de la classe concernée, cela peut être déroutant.
TextGeek

Réponses:

315

Comme dans 2.x, utilisez str.replace().

Exemple:

>>> 'Hello world'.replace('world', 'Guido')
'Hello Guido'
Ignacio Vazquez-Abrams
la source
4
Le module "re" (expression régulière) a des alternatives pour (certaines? Toutes?) Les fonctions de chaîne obsolètes. Dans ce cas re.sub(),.
ToolmakerSteve
8
@ToolmakerSteve: les stringfonctions sont obsolètes. strles méthodes ne le sont pas.
Ignacio Vazquez-Abrams
6
FWIW, Chaque fois que je google, je semble finir par les anciennes fonctions de chaîne obsolètes. Voici le lien vers les méthodes de chaîne (non obsolètes). docs.python.org/3.3/library/stdtypes.html#string-methods ~ ~ or_for_2 docs.python.org/2/library/stdtypes.html#string-methods
ToolmakerSteve
36
Si je dois venir surcharger la pile pour naviguer dans la documentation Python, il y a clairement un problème. Équipe Python si vous lisez. TRIER!
Andrew S
2
Appelez la méthode sur l'objet, pas la classe. 'foo'.replace(...)
Ignacio Vazquez-Abrams
108

replace()est une méthode de <class 'str'>python3:

>>> 'hello, world'.replace(',', ':')
'hello: world'
kev
la source
13

La méthode replace () en python 3 est utilisée simplement par:

a = "This is the island of istanbul"
print (a.replace("is" , "was" , 3))

#3 is the maximum replacement that can be done in the string#

>>> Thwas was the wasland of istanbul

# Last substring 'is' in istanbul is not replaced by was because maximum of 3 has already been reached

la source
2
N'oubliez pas que vous ne pouvez pas non plus mettre 3 et cela changerait toutes les coïncidences.
Ender Look
4

Vous pouvez utiliser str.replace () comme chaîne de str.replace () . Pensez que vous avez une chaîne comme 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'et que vous souhaitez remplacer tout le '#',':',';','/'signe par '-'. Vous pouvez le remplacer de cette façon (manière normale),

>>> str = 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'
>>> str = str.replace('#', '-')
>>> str = str.replace(':', '-')
>>> str = str.replace(';', '-')
>>> str = str.replace('/', '-')
>>> str
'Testing PRI-Sec (-434242332-PP-432-133423846,335)'

ou de cette façon (chaîne de str.replace () )

>>> str = 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'.replace('#', '-').replace(':', '-').replace(';', '-').replace('/', '-')
>>> str
'Testing PRI-Sec (-434242332-PP-432-133423846,335)'
Kushan Gunasekera
la source
3

Essaye ça:

mystring = "This Is A String"
print(mystring.replace("String","Text"))
Ed Dabbah
la source
1

Pour info, lorsque vous ajoutez des caractères à un mot arbitraire à position fixe à l'intérieur de la chaîne (par exemple en changeant un adjectif en adverbe en ajoutant le suffixe -ly ), vous pouvez mettre le suffixe à la fin de la ligne pour plus de lisibilité. Pour ce faire, utilisez à l' split()intérieur replace():

s="The dog is large small"
ss=s.replace(s.split()[3],s.split()[3]+'ly')
ss
'The dog is largely small'
Ooker
la source
0
ss = s.replace(s.split()[1], +s.split()[1] + 'gy')
# should have no plus after the comma --i.e.,
ss = s.replace(s.split()[1], s.split()[1] + 'gy')
Harry Binswanger
la source
6
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment il répond à la question améliorerait considérablement sa valeur à long terme. Veuillez modifier votre réponse pour ajouter des explications.
CodeMouse92
La bonne réponse est précédemment indiquée string.replace fonctionne en python3.
jorfus