The string.replace() is deprecated on python 3.x. What is the new way of doing this?
-
17FWIW, 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-methodsToolmakerSteve– ToolmakerSteve2013-12-13 22:43:22 +00:00Commented Dec 13, 2013 at 22:43
-
20Python 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.Andrew S– Andrew S2016-10-28 00:43:32 +00:00Commented Oct 28, 2016 at 0:43
-
20To be clear: string.replace() is actually not deprecated on Python 3.sboggs11– sboggs112018-04-27 18:55:02 +00:00Commented Apr 27, 2018 at 18:55
-
3It's in the built-in types for 3.x docs.python.org/3.7/library/stdtypes.html#str.replaceJerodG– JerodG2018-11-05 15:31:59 +00:00Commented Nov 5, 2018 at 15:31
-
4Sometimes 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.TextGeek– TextGeek2019-08-10 15:52:39 +00:00Commented Aug 10, 2019 at 15:52
9 Answers
8 Comments
re.sub().string functions are deprecated. str methods are not.'foo'.replace(...)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
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
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:
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:
My related (Chinese) post: 【详解】Python 3中字符串的替换str.replace
Comments
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
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
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')

