s="|0000011111111|"
print s.replace(s[9:12],' ')
...输出为 |00000 11|
s="|0000012345678|"
print s.replace(s[9:12],' ')
...输出为 |00000123 78|
我只想把s[9:12]
替换成三个空格,为什么第一个输出不正确?
最佳答案
str.replace()
将替换您作为第一个参数传入的字符串的所有 处。这里的第一个参数是从切片创建的并不重要,str.replace()
方法没有给出关于该字符串来自何处的任何信息。相反,str.replace()
方法从位置 0 开始向前搜索,在输入字符串中找到子字符串的位置并不重要。
所以你真的只是这样做:
string_to_replace = s[9:12]
s.replace(string_to_replace, ' ')
甚至只是
s.replace('111', ' ')
这些都具有完全相同的效果。
您的第二个示例之所以有效,是因为 s[9:12]
字符串值在 s
中是唯一的;只有一处要替换,位置完全正确。
因为 s[9:12]
是字符串 '111'
,您要求 Python 替换 s
中该字符串的所有出现有空格,并且有两个这样的序列要替换。
显式地对输入字符串进行切片会好得多:
s = s[:9] + ' ' + s[12:]
这需要您要替换的部分之前的所有文本和之后的所有文本,并在这两个子字符串之间放置三个空格。
关于Python 替换函数输出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48271169/