HOWTO · Python
在 Python 中替换字符串中的字符
了解如何在 Python 字符串中按位置替换一个字符,或替换匹配的字符。
本页内容
Python 字符串不可变,因此不能直接为现有字符串中的某个字符赋新值。要修改内容,需要根据更改后的值创建一个新字符串。需要修改某个位置时可以先转换为列表;需要替换匹配文本时可以使用 replace();如果位置已知,也可以使用切片。bytearray() 适用于 ASCII 等面向字节的数据,但它的索引指向字节,而不是一般的 Unicode 字符。
使用 list() 和 join() 替换字符串中的字符
使用内置 list() 函数将字符串转换为列表,在从零开始计数的索引位置赋入替换字符,再将字符重新连接起来。要组合列表项,请在分隔符字符串上调用 join();"" 表示不插入分隔符。例如,索引 2 指向第三个字符:
text = "Naze"
characters = list(text)
characters[2] = "m"
updated = "".join(characters)
print(updated)
Name
这种方法只更改一个位置,原字符串的值保持不变;updated 指向重新连接后得到的新文本。索引必须对应列表中的有效项;如果位置来自用户输入,请先检查字符串长度。
使用 bytearray() 替换字符串中的字符
对于面向字节的文本,先对字符串进行编码,再通过整数赋值修改可变的 bytearray() 中的字节,最后将字节解码为字符串。此示例使用 ASCII,其中显示的每个字符都由一个字节表示:
text = "Naze"
data = bytearray(text, "ascii")
data[2] = ord("m")
updated = data.decode("ascii")
print(updated)
Name
编码和解码时必须使用兼容的字符编码。字节索引通常不等于 Unicode 字符索引:UTF-8 中的非 ASCII 字符可能占用多个字节。只有当任务涉及数据的编码和字节位置时才使用这种方法;处理普通文本时,请使用基于字符串的方法。
使用 replace() 方法替换字符串中匹配的字符
将旧文本和新文本传给字符串方法 replace()。默认情况下,它会替换旧文本每个不重叠的匹配项,并返回一个新字符串:
text = "Naze"
updated = text.replace("z", "m")
print(updated)
Name
原始的 text 保持不变。如果只需替换有限数量的匹配项,可以将数量作为可选的第三个参数传入,例如 text.replace("a", "o", 1)。如果旧文本不存在,replace() 会返回未更改的文本;这有助于区分拼写不匹配和赋值问题。
使用切片和拼接替换已知位置的字符
如果已知从零开始计数的位置,可以取该位置之前的前缀,添加替换字符,再接上该位置之后的后缀。切片 text[:2] 保留索引 2 之前的内容,而 text[3:] 从该字符之后开始:
text = "Naze"
updated = text[:2] + "m" + text[3:]
print(updated)
Name
这样会创建一个新字符串,同时保留周围的前缀和后缀。请确保后缀从待替换字符之后一个位置开始;索引错误可能导致字符被遗漏或重复。如果位置已知,且这种表达式适合你的用途,可以选择这种写法;本文不比较速度。