Reputation: 690
I mean, i want to replace str[9:11]
for another string.
If I do str.replace(str[9:11], "###")
It doesn't work, because the sequence [9:11] can be more than one time.
If str is "cdabcjkewabcef"
i would get "cd###jkew###ef"
but I only want to replace the second.
Upvotes: 9
Views: 40373
Reputation: 11
str = "cdabcjkewabcef"
print((str[::-1].replace('cba','###',1))[::-1])
Upvotes: 1
Reputation: 16224
You can achieve this by doing:
yourString = "Hello"
yourIndexToReplace = 1 #e letter
newLetter = 'x'
yourStringNew="".join((yourString[:yourIndexToReplace],newLetter,yourString[yourIndexToReplace+1:]))
Upvotes: 3
Reputation: 2656
you can do
s="cdabcjkewabcef"
snew="".join((s[:9],"###",s[12:]))
which should be faster than joining like snew=s[:9]+"###"+s[12:]
on large strings
Upvotes: 18
Reputation: 3525
You can use join()
with sub-strings.
s = 'cdabcjkewabcef'
sequence = '###'
indicies = (9,11)
print sequence.join([s[:indicies[0]-1], s[indicies[1]:]])
>>> 'cdabcjke###cef'
Upvotes: 2
Reputation: 4225
Here is a sample code:
word = "astalavista"
index = 0
newword = ""
addon = "xyz"
while index < 8:
newword = newword + word[index]
index += 1
ind = index
i = 0
while i < len(addon):
newword = newword + addon[i]
i += 1
while ind < len(word):
newword = newword + word[ind]
ind += 1
print newword
Upvotes: 0
Reputation: 13510
Given txt and s - the string you want to replace:
txt.replace(s, "***", 1).replace(s, "###").replace("***", s)
Another way:
txt[::-1].replace(s[::-1], "###", 1)[::-1]
Upvotes: 1