替换字符串中字符的实例

时间:2012-10-04 08:59:41

标签: python string

这个简单的代码只是试图用冒号替换分号(在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不起作用,因为我无法使用它。

15 个答案:

答案 0 :(得分:145)

python中的字符串是不可变的,因此您不能将它们视为列表并将其分配给索引。

改为使用.replace()

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

如果您只需要替换某些分号,则需要更加具体。您可以使用切片来隔离要替换的字符串部分:

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

这将替换字符串前10个字符中的所有分号。

答案 1 :(得分:53)

如果您不想使用.replace()

,您可以执行以下操作,使用给定索引处的相应字符替换任何字符。
word = 'python'
index = 4
char = 'i'

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

o/p: pythin

答案 2 :(得分:24)

将字符串转换为列表;然后你可以单独更改字符。然后你可以将它与.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

答案 3 :(得分:6)

如果要替换单个分号:

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

没有测试过它。

答案 4 :(得分:3)

这应该涵盖稍微更一般的情况,但您应该能够为您的目的自定义

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)

希望这有帮助

答案 5 :(得分:1)

如果要替换变量'n'中指定的索引值,请尝试以下操作:

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

答案 6 :(得分:1)

您不能简单地为字符串中的字符赋值。 使用此方法替换特定字符的值:

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

输出:在* ia

另外,如果你想为除第一个字符以外的第一个字符的所有出现替换say *, 例如。 string = babble output = ba ** le

代码:

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

答案 7 :(得分:1)

在字符串上有效使用.replace()方法,而无需创建单独的列表 例如,看看包含有空格的字符串的列表用户名,我们要在每个用户名字符串中用下划线替换空格。

usernames = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]

要替换每个用户名中的空格,请考虑使用python中的range函数。

for i in range(len(usernames)):
    usernames[i] = usernames[i].lower().replace(" ", "_")

print(usernames)

答案 8 :(得分:0)

如何?

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 :(得分:0)

要替换特定索引处的字符,功能如下:

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)

我编写了此方法来替换特定实例的字符或字符串。实例从0开始(如果将可选的inst参数更改为1,并将test_instance变量更改为1,则可以轻松将其更改为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 :(得分:0)

您可以这样做:

string = "this; is a; sample; ; python code;!;" #your desire string
result = ""
for i in range(len(string)):
    s = string[i]
    if (s == ";" and i in [4, 18, 20]): #insert your desire list
        s = ":"
    result = result + s
print(result)

答案 12 :(得分:0)

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]

usernames = []

for i in names:
    if " " in i:
        i = i.replace(" ", "_")
    print(i)

输出: 乔伊·特里比亚尼 莫妮卡·盖勒 钱德勒 Phoebe_Buffay

答案 13 :(得分:0)

我的问题是我有一个数字列表,我只想替换那个数字的一​​部分,所以我这样做:

original_list = ['08113', '09106', '19066', '17056', '17063', '17053']

# With this part I achieve my goal
cves_mod = []
for i in range(0,len(res_list)):
    cves_mod.append(res_list[i].replace(res_list[i][2:], '999'))
cves_mod

# Result
cves_mod
['08999', '09999', '19999', '17999', '17999', '17999']

答案 14 :(得分:0)

更简单:

input = "a:b:c:d"
output =''
for c in input:
    if c==':':
        output +='/'
    else:
        output+=c
print(output)

输出:a/b/c/d