392

The string.replace() is deprecated on python 3.x. What is the new way of doing this?

5
  • 17
    FWIW, I had the same confusion. Google "python string replace" took me to old deprecated string functions in python 2.7. IMHO, that section could use a big bold box explaining "string.xxx()" vs "xxx(string)", and directing people to the non-deprecated string methods, e.g. to docs.python.org/library/stdtypes.html#string-methods Commented Dec 13, 2013 at 22:43
  • 20
    Python documentation is an absolute shambles considering it is touted as an ideal first language. Quite often the stuff is there, but because of the poor way its organized, its often not indexed well by search engines or even their own site. Look at ToolMakerSteve's link, core string functions are lumpted in to standard types. This does not come up when you search for string functions. Commented Oct 28, 2016 at 0:43
  • 20
    To be clear: string.replace() is actually not deprecated on Python 3. Commented Apr 27, 2018 at 18:55
  • 3
    It's in the built-in types for 3.x docs.python.org/3.7/library/stdtypes.html#str.replace Commented Nov 5, 2018 at 15:31
  • 4
    Sometimes people write "str.replace" when they mean [your string variable].replace. Because 'str' is also the name of the relevant class, this can be confusing. Commented Aug 10, 2019 at 15:52

9 Answers 9

415

As in 2.x, use str.replace().

Example:

>>> 'Hello world'.replace('world', 'Guido')
'Hello Guido'
Sign up to request clarification or add additional context in comments.

8 Comments

The "re" (regular expression) module has alternatives for (some? all?) deprecated string functions. In this case, re.sub().
@ToolmakerSteve: string functions are deprecated. str methods are not.
FWIW, Whenever I google, I seem to end up at the old deprecated string functions. Here is the link to the (not deprecated) string methods. docs.python.org/3.3/library/stdtypes.html#string-methods ~or_for_2~ docs.python.org/2/library/stdtypes.html#string-methods
If I have to come to stack overflow to navigate the Python documentation there is a clearly problem. Python team if you are reading. SORT IT OUT!
Call the method on the object, not the class. 'foo'.replace(...)
|
131

replace() is a method of <class 'str'> in python3:

>>> 'hello, world'.replace(',', ':')
'hello: world'

Comments

29

The replace() method in python 3 is used simply by:

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

1 Comment

Remember that also you can not put 3 and it would change all the coincidences.
18

You can use str.replace() as a chain of str.replace(). Think you have a string like 'Testing PRI/Sec (#434242332;PP:432:133423846,335)' and you want to replace all the '#',':',';','/' sign with '-'. You can replace it either this way(normal way),

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

or this way(chain of str.replace())

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

1 Comment

Easier to import re and then string = re.sub("[#:;/]", "-", string)
11

Official doc for str.replace of Python 3

official doc: Python 3's str.replace

str.replace(old, new[, count])

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

corresponding VSCode's syntax notice is:

enter image description here

str.replace(self: str, old, new, count) -> str

Two method to use str.replace

  • Method 1: use builtin str's replace -> str.replace(strVariable, old, new[, count])
replacedStr1 = str.replace(originStr, "from", "to")
  • Method 2: use str variable's replace -> strVariable.replace(old, new[, count])
replacedStr2 = originStr.replace("from", "to")

Full demo

code:

originStr = "Hello world"

# Use case 1: use builtin str's replace -> str.replace(strVariable, old, new[, count])
replacedStr1 = str.replace(originStr, "world", "Crifan Li")
print("case 1: %s -> %s" % (originStr, replacedStr1))

# Use case 2: use str variable's replace -> strVariable.replace(old, new[, count])
replacedStr2 = originStr.replace("world", "Crifan Li")
print("case 2: %s -> %s" % (originStr, replacedStr2))

output:

case 1: Hello world -> Hello Crifan Li
case 2: Hello world -> Hello Crifan Li

screenshot:

enter image description here

My related (Chinese) post: 【详解】Python 3中字符串的替换str.replace

Comments

6

Try this:

mystring = "This Is A String"
print(mystring.replace("String","Text"))

Comments

2

For readability: appending some characters to a position-fixed word

For example: converting an adjective to an adverb by adding the suffix -ly.

To improve readability, you can put the suffix at the end of the line for readability. To do this, use split() inside replace():

s="The dog is large small"
ss=s.replace(s.split()[3],s.split()[3]+'ly')
ss
'The dog is largely small'

Comments

0

Simple Replace:         .replace(old, new, count) .

text = "Apples taste Good."
print(text.replace('Apples', 'Bananas'))          # use .replace() on a variable
Bananas taste Good.          <---- Output

print("Have a Bad Day!".replace("Bad","Good"))    # Use .replace() on a string
Have a Good Day!             <----- Output

print("Mom is happy!".replace("Mom","Dad").replace("happy","angry"))  #Use many times
Dad is angry!                <----- Output

Comments

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

2 Comments

While this code may answer the question, providing additional context regarding why and/or how it answers the question would significantly improve its long-term value. Please edit your answer to add some explanation.
The correct answer is previously stated string.replace works in python3.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.