Подтвердить что ты не робот

Python strip() несколько символов?

Я хочу удалить любые скобки из строки. Почему это не работает должным образом?

>>> name = "Barack (of Washington)"
>>> name = name.strip("(){}<>")
>>> print name
Barack (of Washington
4b9b3361

Ответ 1

Я проверил время, используя каждый метод 100000 раз в цикле. Результаты удивили меня. (Результаты все еще удивляют меня после редактирования их в ответ на действительную критику в комментариях.)

Здесь script:

import timeit

bad_chars = '(){}<>'

setup = """import re
import string
s = 'Barack (of Washington)'
bad_chars = '(){}<>'
rgx = re.compile('[%s]' % bad_chars)"""

timer = timeit.Timer('o = "".join(c for c in s if c not in bad_chars)', setup=setup)
print "List comprehension: ",  timer.timeit(100000)


timer = timeit.Timer("o= rgx.sub('', s)", setup=setup)
print "Regular expression: ", timer.timeit(100000)

timer = timeit.Timer('for c in bad_chars: s = s.replace(c, "")', setup=setup)
print "Replace in loop: ", timer.timeit(100000)

timer = timeit.Timer('s.translate(string.maketrans("", "", ), bad_chars)', setup=setup)
print "string.translate: ", timer.timeit(100000)

Вот результаты:

List comprehension:  0.631745100021
Regular expression:  0.155561923981
Replace in loop:  0.235936164856
string.translate:  0.0965719223022

Результаты других прогонов следуют аналогичной схеме. Однако, если скорость не является основной проблемой, я все же думаю, что string.translate не является наиболее читаемым; другие три более очевидны, хотя и медленнее в разной степени.

Ответ 2

Потому что это не то, что делает strip(). Он удаляет ведущие и завершающие символы, присутствующие в аргументе, но не те символы в середине строки.

Вы можете сделать:

name= name.replace('(', '').replace(')', '').replace ...

или

name= ''.join(c for c in name if c not in '(){}<>')

или, возможно, использовать регулярное выражение:

import re
name= re.sub('[(){}<>]', '', name)

Ответ 3

string.translate с таблицей = Нет работает нормально.

>>> name = "Barack (of Washington)"
>>> name = name.translate(None, "(){}<>")
>>> print name
Barack of Washington

Ответ 4

Потому что strip() разделяет только конечные и ведущие символы, основываясь на том, что вы предоставили. Я предлагаю:

>>> import re
>>> name = "Barack (of Washington)"
>>> name = re.sub('[\(\)\{\}<>]', '', name)
>>> print(name)
Barack of Washington

Ответ 5

strip удаляет только символы из самой передней и задней части строки.

Чтобы удалить список символов, вы можете использовать метод translate:

import string
name = "Barack (of Washington)"
table = string.maketrans( '', '', )
print name.translate(table,"(){}<>")
# Barack of Washington

Ответ 6

Например, строка s="(U+007c)"

Чтобы удалить только скобки из s, попробуйте следующее:

import re
a=re.sub("\\(","",s)
b=re.sub("\\)","",a)
print(b)