Python:有一种简单的方法来替换字符串中的字符而不是用replace()

时间:2015-10-20 19:59:47

标签: python string list replace

对于我的一个作业,我必须用字符串替换我选择的另一个字符的标记字符。哦,但是replace()不是一个选项

我是新手,所以请不要把我分开太多:)

def myReplace(content,token,new):
content = list(content)
newContent = []
newContent = list(newContent)
for item in content:
    if item == token:
        item = ''
        newContent[item].append[new]
return newContent

根据上述内容,目的是检查字符串中的每个字母是否与令牌字符匹配,如果匹配,则替换为新字母。

我不知道我需要添加什么,或者我做错了什么。

6 个答案:

答案 0 :(得分:3)

好吧,因为字符串是可迭代的,所以你可以这样做:

def my_replace(original, old, new):
    return "".join(x if not x == old else new for x in original)

示例:

>>> my_replace("reutsharabani", "r", "7")
'7eutsha7abani'

说明:每当遇到旧字符时,它使用generator expression发出新字符,并使用str.join连接该表达式而不使用分隔符(实际上为空)字符串分隔符。)

旁注:您实际上无法改变字符串,这就是为什么所有解决方案都必须构造一个新字符串。

答案 1 :(得分:2)

使用index()查找字符。 连接正面,新的字符和背面。

pos = str.index(old_char)
newStr = str[:pos] + new_char + str[pos+1:]

如果你有多次出现的old_char,你可以迭代直到它们全部完成,或者把它放到一个函数中并重复出现在字符串的后面。

答案 2 :(得分:1)

您可以遍历每个角色并替换您的令牌角色。你可以通过构建一个字符串来实现这个目的:

token = "$"
repl = "!"
s = "Hello, world$"

new_s = ""

for ch in s: 
    if ch == token:
        new_s += repl
    else:
        new_s += ch

或使用str.join

的生成器
def replacech(s, token, repl):
    for ch in s:
        if ch == token:
            yield repl
        else:
            yield ch

s = "Hello, World$"
new_s = ''.join(replacech(s, "$", "!"))

答案 3 :(得分:0)

def repl(st,token,new):
    ind = st.index(token)
    st = st[:ind] + new +st[ind + len(new):]
    return st

print(repl("anaconda","co","bo"))

anabonda

答案 4 :(得分:0)

使用正则表达式:

import re

token = '-'
str = 'foo-bar'
new_str = re.sub(token, '', str)

这导致:

boobar

答案 5 :(得分:0)

如果你知道translate()和string.maketrans()

,那就是单线程
def myReplace(content, token, new):
    # Note: assumes token and new are single-character strings
    return content.translate(string.maketrans(token, new))