Replacing instances of a character in a string

2018-12-31 20:54发布

问题:

This simple code that simply tries to replace semicolons (at i-specified postions) by colons does not work:

for i in range(0,len(line)):
     if (line[i]==\";\" and i in rightindexarray):
         line[i]=\":\"

It gives the error

line[i]=\":\"
TypeError: \'str\' object does not support item assignment

How can I work around this to replace the semicolons by colons? Using replace does not work as that function takes no index- there might be some semicolons I do not want to replace.

Example

In the string I might have any number of semicolons, eg \"Hei der! ; Hello there ;!;\"

I know which ones I want to replace (I have their index in the string). Using replace does not work as I\'m not able to use an index with it.

回答1:

Strings in python are immutable, so you cannot treat them as a list and assign to indices.

Use .replace() instead:

line = line.replace(\';\', \':\')

If you need to replace only certain semicolons, you\'ll need to be more specific. You could use slicing to isolate the section of the string to replace in:

line = line[:10].replace(\';\', \':\') + line[10:]

That\'ll replace all semi-colons in the first 10 characters of the string.



回答2:

You can do the below, to replace any char with a respective char at a given index, if you wish not to use .replace()

word = \'python\'
index = 4
char = \'i\'

word = word[:index] + char + word[index + 1:]
print word

o/p: pythin


回答3:

Turn the string into a list; then you can change the characters individually. Then you can put it back together with .join:

s = \'a;b;c;d\'
slist = list(s)
for i, c in enumerate(slist):
    if slist[i] == \';\' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
        slist[i] = \':\'
s = \'\'.join(slist)
print s # prints a:b:c;d


回答4:

If you want to replace a single semicolon:

for i in range(0,len(line)):
 if (line[i]==\";\"):
     line = line[:i] + \":\" + line[i+1:]

Havent tested it though.



回答5:

This should cover a slightly more general case, but you should be able to customize it for your purpose

def selectiveReplace(myStr):
    answer = []
    for index,char in enumerate(myStr):
        if char == \';\':
            if index%2 == 1: # replace \';\' in even indices with \":\"
                answer.append(\":\")
            else:
                answer.append(\"!\") # replace \';\' in odd indices with \"!\"
        else:
            answer.append(char)
    return \'\'.join(answer)

Hope this helps



回答6:

If you are replacing by an index value specified in variable \'n\', then try the below:

def missing_char(str, n):
 str=str.replace(str[n],\":\")
 return str


回答7:

You cannot simply assign value to a character in the string. Use this method to replace value of a particular character:

name = \"India\"
result=name .replace(\"d\",\'*\')

Output: In*ia

Also, if you want to replace say * for all the occurrences of the first character except the first character, eg. string = babble output = ba**le

Code:

name = \"babble\"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,\'*\')
return front+back


回答8:

How about this:

sentence = \'After 1500 years of that thinking surpressed\'

sentence = sentence.lower()

def removeLetter(text,char):

    result = \'\'
    for c in text:
        if c != char:
            result += c
    return text.replace(char,\'*\')
text = removeLetter(sentence,\'a\')


回答9:

To replace a character at a specific index, the function is as follows:

def replace_char(s , n , c):
    n-=1
    s = s[0:n] + s[n:n+1].replace(s[n] , c) + s[n+1:]
    return s

where s is a string, n is index and c is a character.



标签: python string