web-dev-qa-db-de.com

Instanzen eines Zeichens in einer Zeichenfolge ersetzen

Dieser einfache Code, der einfach versucht, Semikolons (an von i angegebenen Positionen) durch Doppelpunkte zu ersetzen, funktioniert nicht:

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

Es gibt den Fehler 

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

Wie kann ich das umgehen, um die Semikolons durch Doppelpunkte zu ersetzen? Die Verwendung von replace funktioniert nicht, da für diese Funktion kein Index erforderlich ist. Möglicherweise gibt es Semikolons, die ich nicht ersetzen möchte.

Beispiel

In der Zeichenfolge kann ich eine beliebige Anzahl von Semikolons haben, zB "Hei der!; Hallo dort;!;"

Ich weiß, welche ich ersetzen möchte (ich habe ihren Index in der Zeichenfolge). Die Verwendung von replace funktioniert nicht, da ich damit keinen Index verwenden kann.

76
The Unfun Cat

Zeichenfolgen in Python sind unveränderlich. Sie können sie also nicht als Liste behandeln und Indizes zuweisen.

Verwenden Sie stattdessen .replace() :

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

Wenn Sie nur bestimmte Semikolons ersetzen müssen, müssen Sie spezifischer sein. Sie können slicing verwenden, um den zu ersetzenden Abschnitt der Zeichenfolge zu isolieren:

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

Dadurch werden alle Semikolons in den ersten 10 Zeichen der Zeichenfolge ersetzt.

136
Martijn Pieters

Sie können Folgendes tun, um ein beliebiges Zeichen durch ein entsprechendes Zeichen an einem bestimmten Index zu ersetzen, wenn Sie .replace() nicht verwenden möchten.

Word = 'python'
index = 4
char = 'i'

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

o/p: pythin
50
Dineshs91

Verwandle den String in eine Liste; dann können Sie die Zeichen einzeln ändern. Dann können Sie es mit .join wieder zusammensetzen:

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
23
nneonneo

Wenn Sie ein einzelnes Semikolon ersetzen möchten:

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

Havent hat es trotzdem getestet.

6
Vic

Dies sollte einen etwas allgemeineren Fall abdecken, aber Sie sollten in der Lage sein, ihn für Ihre Zwecke anzupassen

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)

Hoffe das hilft

3
inspectorG4dget

Sie können einem Zeichen in der Zeichenfolge nicht einfach einen Wert zuweisen. Verwenden Sie diese Methode, um den Wert eines bestimmten Zeichens zu ersetzen:

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

Ausgabe: In * ia

Wenn Sie sagen möchten, sagen Sie * für alle Vorkommen des ersten Zeichens mit Ausnahme des ersten Zeichens string = babble Ausgabe = ba ** le

Code:

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

Wenn Sie durch einen in der Variablen 'n' angegebenen Indexwert ersetzen, versuchen Sie Folgendes:

def missing_char(str, n):
 str=str.replace(str[n],":")
 return str
1
Bipin Shetty

Ich habe diese Methode geschrieben, um Zeichen oder Zeichenfolgen in einer bestimmten Instanz zu ersetzen. Instanzen beginnen bei 0 (dies kann leicht auf 1 geändert werden, wenn Sie das optionale Argument inst in 1 und die Variable test_instance in 1 ändern.

def replace_instance(some_Word, str_to_replace, new_str='', inst=0):
    return_Word = ''
    char_index, test_instance = 0, 0
    while char_index < len(some_Word):
        test_str = some_Word[char_index: char_index + len(str_to_replace)]
        if test_str == str_to_replace:
            if test_instance == inst:
                return_Word = some_Word[:char_index] + new_str + some_Word[char_index + len(str_to_replace):]
                break
            else:
                test_instance += 1
        char_index += 1
    return return_Word
0
Matt Farguson

Um ein Zeichen an einem bestimmten Index zu ersetzen, lautet die Funktion wie folgt:

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

dabei ist s ein String, n ist Index und c ist ein Zeichen.

0
Sanket Hire

Wie wäre es damit:

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')
0
Dylan Maulucci