Jak używać string.replace () w Pythonie 3.x

280

String.replace () jest przestarzałe w Pythonie 3.x. Jaki jest nowy sposób na zrobienie tego?

Dewsworld
źródło
11
FWIW, miałem to samo zamieszanie. Google „zamień ciąg znaków w python” zabrał mnie do starych przestarzałych funkcji ciągów w python 2.7. IMHO, w tej sekcji można użyć dużego pogrubionego pola wyjaśniającego „string.xxx ()” vs „xxx (string)” i kierującego ludzi do nieaktualnych metod łańcuchowych, np. Docs.python.org/library/stdtypes.html # string-
Method
8
Dokumentacja w języku Python jest absolutnym chaosem, biorąc pod uwagę, że jest reklamowana jako idealny pierwszy język. Dość często jest tam coś, ale z powodu złego sposobu organizacji, często nie jest dobrze indeksowany przez wyszukiwarki, a nawet własną stronę. Spójrz na link ToolMakerSteve, podstawowe funkcje łańcucha są wprowadzone do standardowych typów. Nie pojawia się to podczas wyszukiwania funkcji ciągów.
Andrew S
10
Żeby było jasne: string.replace () nie jest w rzeczywistości przestarzały w Pythonie 3.
sboggs11 27.04.18
2
Jest we wbudowanych typach 3.x docs.python.org/3.7/library/stdtypes.html#str.replace
JerodG
1
Czasami ludzie piszą „str .replace”, gdy mają na myśli [twoja zmienna łańcuchowa] .replace. Ponieważ „str” jest także nazwą odpowiedniej klasy, może to być mylące.
TextGeek,

Odpowiedzi:

315

Jak w 2.x, użyj str.replace().

Przykład:

>>> 'Hello world'.replace('world', 'Guido')
'Hello Guido'
Ignacio Vazquez-Abrams
źródło
4
Moduł „re” (wyrażenie regularne) ma alternatywy dla (niektórych? Wszystkich?) Przestarzałych funkcji łańcuchowych. W tym wypadku re.sub().
ToolmakerSteve,
8
@ToolmakerSteve: stringfunkcje są przestarzałe. strmetody nie są.
Ignacio Vazquez-Abrams,
6
FWIW, Ilekroć google, wydaje się, że kończę na starych przestarzałych funkcjach ciągów. Oto link do (nie przestarzałych) metod łańcuchowych. docs.python.org/3.3/library/stdtypes.html#string-methods ~ or_for_2 ~ docs.python.org/2/library/stdtypes.html#string-methods
ToolmakerSteve
36
Jeśli muszę przyjść do przepełnienia stosu, aby poruszać się w dokumentacji Pythona, to jest oczywisty problem. Zespół Python, jeśli czytasz. ROZWIĄZAĆ TO!
Andrew S,
2
Wywołaj metodę na obiekcie, a nie klasie. 'foo'.replace(...)
Ignacio Vazquez-Abrams
108

replace()jest metodą <class 'str'>w python3:

>>> 'hello, world'.replace(',', ':')
'hello: world'
kev
źródło
13

Metoda replace () w pythonie 3 jest używana po prostu przez:

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

źródło
2
Pamiętaj, że również nie możesz umieścić 3 i to zmieni wszystkie zbiegi okoliczności.
Ender Look
4

Możesz użyć str.replace () jako łańcucha str.replace () . Myślisz, że masz ciąg znaków 'Testing PRI/Sec (#434242332;PP:432:133423846,335)'i chcesz zastąpić cały '#',':',';','/'znak znakiem '-'. Możesz go wymienić w ten sposób (normalny sposób),

>>> 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)'

lub w ten sposób (chain of 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
źródło
3

Spróbuj tego:

mystring = "This Is A String"
print(mystring.replace("String","Text"))
Ed Dabbah
źródło
1

Do Twojej wiadomości, dodając niektóre znaki do dowolnego słowa o ustalonej pozycji wewnątrz ciągu (np. Zmieniając przymiotnik na przysłówek poprzez dodanie przyrostka -ly ), możesz umieścić przyrostek na końcu wiersza, aby był czytelny. Aby to zrobić, użyj split()wewnątrz replace():

s="The dog is large small"
ss=s.replace(s.split()[3],s.split()[3]+'ly')
ss
'The dog is largely small'
Ooker
źródło
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
źródło
6
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak odpowiada na pytanie, znacznie poprawiłoby jego długoterminową wartość. Proszę edytować swoje odpowiedzi, aby dodać trochę wyjaśnień.
CodeMouse92
Prawidłowa odpowiedź jest poprzednio podana string.replace działa w python3.
jorfus