Python替换函数输出不同的结果

use*_*611 3 python string replace python-2.7

s="|0000011111111|"
print s.replace(s[9:12],'   ')
Run Code Online (Sandbox Code Playgroud)

......输出是 |00000 11|

s="|0000012345678|"
print s.replace(s[9:12],'   ')
Run Code Online (Sandbox Code Playgroud)

......输出是 |00000123 78|

我只想替换s[9:12]为三个空格,为什么第一个输出不正确?

DYZ*_*DYZ 6

在第一种情况下s[9:12]'111'.您的代码用三个空格替换每个非重叠的实例'111'.


Mar*_*ers 6

str.replace()将替换您传入的所有字符串作为第一个参数.这里的第一个参数是从切片创建的,这并不重要,该str.replace()方法没有给出关于该字符串来自何处的任何信息.相反,该str.replace()方法从位置0开始并向前搜索,在输入字符串中找到子字符串的位置无关紧要.

所以你真的只是这样做:

string_to_replace = s[9:12]
s.replace(string_to_replace, '   ')
Run Code Online (Sandbox Code Playgroud)

甚至只是

s.replace('111', '   ')
Run Code Online (Sandbox Code Playgroud)

这些都具有完全相同的效果.

您的第二个示例仅起作用,因为s[9:12]字符串值是唯一的s; 在恰当的位置只需要替换一次.

因为s[9:12]是字符串'111',所以你要求Python s用空格替换该字符串的所有出现,并且有两个这样的序列要替换.

你明确切片输入字符串要好得多:

s = s[:9] + '   ' + s[12:]
Run Code Online (Sandbox Code Playgroud)

这需要所有文字之前,你要替换的部分,所有的文字,并提出三个空格在这两个子之间.