为什么 python str.strip() 方法不删除此代码中的前导字符?

Why doesn't the python str.strip() method remove the leading characters in this code?

我在下面使用了 str.strip('0')。这不适用于以下代码中的前导零。

str1 = " 0000000this is string example....wow!!!0000000";
str1mod = str1.strip('0')
print str1mod
print len(str1mod)
str2 = "0000000this is string example....wow!!!0000000";
str2mod = str2.strip('0')
print str2mod
print len(str2mod)

输出像

 0000000this is string example....wow!!!
40
this is string example....wow!!!
32

为什么 str1 中的前导空格没有被删除?

期望得到类似

的输出
 this is string example....wow!!!
40
this is string example....wow!!!
32

在你的例子中,零实际上不是“前导”,它们前面有一个 space,所以你要做的是将字符串剥离两次:

str1 = " 0000000this is string example....wow!!!0000000";
str1mod = str1.strip().strip('0')
print str1mod
print len(str1mod)
str2 = "0000000this is string example....wow!!!0000000";
str2mod = str2.strip('0')
print str2mod
print len(str2mod)

在Python中输出2 shell:

Python 2.7.17 (default, Apr 15 2020, 17:20:14) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> str1 = " 0000000this is string example....wow!!!0000000";
>>> str1mod = str1.strip().strip('0')
>>> print str1mod
this is string example....wow!!!
>>> print len(str1mod)
32
>>> str2 = "0000000this is string example....wow!!!0000000";
>>> str2mod = str2.strip('0')
>>> print str2mod
this is string example....wow!!!
>>> print len(str2mod)
32
>>> 
>>> 

str.strip([chars])

Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace.

强调我的。

strip 仅删除 前导或尾随 字符。由于 0 的序列不是前导的——它前面有一个 space——它没有被剥离。

如果要删除字符串中任意位置的字符,请使用 str.remove

如果您有更复杂的需求,请使用 re.sub 例如删除前导和尾随的 0,即使它们前面有 space 你可以使用

re.sub(r'^(\s*)(0*)([^0]*)(0*)$', r'')