如何在Python中替换字符串的一部分?
如何在Python中替换一个字符串中的一组字符?
我想做的是:假设我有一个字符串'abcdefghijkl',我想把从末尾数第二个字符(k)替换成A。但是我遇到了一个错误:
>>> aa = 'abcdefghijkl'
>>> print aa[-2]
k
>>> aa[-2]='A'
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
aa[-2]='A'
TypeError: 'str' object does not support item assignment
所以,我的问题是:有没有一种优雅的方法可以从指定位置开始,在一个字符串中替换(替代)另一个字符串的字符?类似于:
# subst(whole_string,symbols_to_substiture_with,starting_position)
>>> print aa
abcdefghijkl
>>> aa = subst(aa,'A',-2)
>>> print aa
abcdefghijAl
有没有什么简单的方法可以实现这个替换?
5 个回答
5
还有一种方法可以做到这一点:
s = "abcdefghijkl"
l = list( s )
l[-2] = 'A'
s = "".join( l )
在Python中,字符串是不可变的序列,这点跟元组很像。你可以从字符串或元组创建一个列表,列表是可变的。然后你可以修改列表中的某些位置,最后再用 join
方法把列表变回字符串,或者用元组构造器把它变回元组。
补充说明:对于字符串,你可以使用 bytearray
(文档)类型来代替 list
,这样就可以用 str
构造器把它转换成字符串。
另外,你可以自己实现一个,或者使用标准库中的这个类:http://docs.python.org/library/userdict.html#UserString.MutableString,可以这样做:
>>> from UserString import MutableString
>>> s = MutableString( "zdfgzbdr " )
>>> s
'zdfgzbdr '
>>> s[1:5]
'dfgz'
>>> s[1:5] = "xxxx"
>>> s
'zxxxxbdr '
可惜的是,MutableString
已经被弃用了,在Python 3中不可用(不过你仍然可以自己写一个类,我想)。
12
TypeError: 'str' object does not support item assignment
这是正常现象——在Python中,字符串是不可变的。
一种方法是进行一些切片和拼接。像这样:
>>> aa = 'abcdefghijkl'
>>> changed = aa[0:-2] + 'A' + aa[-1]
>>> print changed
abcdefghijAl
拼接的结果,changed
,将会是另一个不可变的字符串。需要注意的是,这并不是适用于所有替换情况的通用解决方案。
20
如果你要替换的位置总是一样的,你可以这样做:
>>> s = s[0:-2] + "A" + s[-1:]
>>> print s
abcdefghijAl
在一般情况下,你可以这样做:
>>> rindex = -2 #Second to the last letter
>>> s = s[0:rindex] + "A" + s[rindex+1:]
>>> print s
abcdefghijAl
补充:如果你想在替换时只重复一个字母的情况,应该这样做:
>>> s = "abcdefghijkl"
>>> repl_str = "A"
>>> rindex = -4 #Start at 4th character from the end
>>> repl = 3 #Replace 3 characters
>>> s = s[0:rindex] + (repl_str * repl) + s[rindex+repl:]
>>> print s
abcdefghAAAl