Замена экземпляров символа в строке
Этот простой код, который просто пытается заменить точки с запятой (в i-заданных позициях) двоеточиями, не работает:
for i in range(0,len(line)):
if (line[i]==";" and i in rightindexarray):
line[i]=":"
Он дает ошибку
line[i]=":"
TypeError: 'str' object does not support item assignment
Как я могу обойти это, чтобы заменить точки с запятой двоеточиями? Использование replace не работает, поскольку эта функция не принимает индекс - могут быть некоторые точки с запятой, которые я не хочу заменять.
Пример
В строке может быть любое количество точек с запятой, например "Hei der!, Hello there;!;"
Я знаю, какие из них я хочу заменить (у меня есть индекс в строке). Использование replace не работает, поскольку я не могу использовать индекс с ним.
Ответы
Ответ 1
Строки в python неизменяемы, поэтому вы не можете рассматривать их как список и присваивать индексы.
Используйте .replace()
:
line = line.replace(';', ':')
Если вам нужно заменить только определенные точки с запятой, вам нужно быть более конкретным. Вы можете использовать нарезку, чтобы изолировать секцию строки для замены в:
line = line[:10].replace(';', ':') + line[10:]
Это заменит все полуколоны в первых 10 символах строки.
Ответ 2
Вы можете сделать ниже, чтобы заменить любой char на соответствующий char на данный индекс, если вы не хотите использовать .replace()
word = 'python'
index = 4
char = 'i'
word = word[:index] + char + word[index + 1:]
print word
o/p: pythin
Ответ 3
Поверните строку в список; то вы можете изменить символы в отдельности. Затем вы можете вернуть его вместе с .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
Если вы хотите заменить одну точку с запятой:
for i in range(0,len(line)):
if (line[i]==";"):
line = line[:i] + ":" + line[i+1:]
Havent проверил это, хотя.
Ответ 5
Это должно охватывать несколько более общий случай, но вы должны быть в состоянии настроить его для своей цели
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)
Надеюсь, что это поможет
Ответ 6
Вы не можете просто назначить значение символу в строке.
Используйте этот метод для замены значения определенного символа:
name = "India"
result=name .replace("d",'*')
Выход: In * ia
Кроме того, если вы хотите заменить say * для всех вхождений первого символа, кроме первого символа,
например. строка = лепетный вывод = ba ** le
код:
name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back
Ответ 7
Если вы заменяете значение индекса, указанное в переменной 'n', попробуйте следующее:
def missing_char(str, n):
str=str.replace(str[n],":")
return str
Ответ 8
Как насчет этого:
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
Чтобы заменить символ по определенному индексу, функция выглядит следующим образом:
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
где s - строка, n - индекс, а c - символ.
Ответ 10
Я написал этот метод, чтобы заменить символы или заменить строки в конкретном случае. экземпляры начинаются с 0 (это можно легко изменить на 1, если вы измените необязательный аргумент inst на 1, а переменная test_instance на 1.
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
Ответ 11
эффективно использовать метод .replace() для строки без создания отдельного списка
например, взгляните на список имен пользователей, содержащий строку с некоторым пробелом, мы хотим заменить пробел подчеркиванием в каждой строке имени пользователя.
usernames = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
для замены пробелов в каждом имени пользователя рассмотрите возможность использования функции range в python.
for i in range(len(usernames)):
usernames[i] = usernames[i].lower().replace(" ", "_")
print(usernames)