David Davó
David Davó

Reputation: 690

Python: String replace index

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

Answers (6)

veerabhadra butte
veerabhadra butte

Reputation: 11

str = "cdabcjkewabcef"
print((str[::-1].replace('cba','###',1))[::-1])

Upvotes: 1

developer_hatch
developer_hatch

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

janbrohl
janbrohl

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

ospahiu
ospahiu

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

User_Targaryen
User_Targaryen

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

Israel Unterman
Israel Unterman

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

Related Questions