#python #string #strip
#python #строка #Стриптиз
Вопрос:
Я использовал 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
Комментарии:
1. «Почему начальные пробелы не удаляются»… потому что вы не сказали Python сделать это? Вы сказали ему удалить 0, а не пробелы.
Ответ №1:
В вашем случае нули на самом деле не являются «ведущими», им предшествует пробел, поэтому вам нужно сделать, это дважды удалить строку:
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:
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
>>>
>>>
Ответ №2:
str.strip([chars])
Возвращает копию строки с удаленными начальными и конечными символами.
chars
Аргумент представляет собой строку, указывающую набор символов, которые необходимо удалить. Если опущено илиNone
,chars
аргумент по умолчанию удаляет пробелы.
Акцент мой.
strip
удаляет только начальные или конечные символы. Поскольку последовательность 0
s не является ведущей — перед ней стоит пробел — она не удаляется.
Если вы хотите удалить символы из любого места строки, используйте str.remove
.
Если у вас более сложные потребности, используйте re.sub
, например, для удаления начальных и конечных нулей, даже если им предшествует пробел, вы можете использовать что-то вроде
re.sub(r'^(s*)(0*)([^0]*)(0*)$', r'13')
Комментарии:
1. Пример кода для удаления
0
и пробела:str1mod = str1.strip(' 0')
.2. Да, однако, глядя на исходные фрагменты, похоже, что автор хочет удалить 0, не касаясь остальных.
3. Вы правы. Я этого не осознавал. В этом случае ваше регулярное выражение является лучшим решением.