UFO ET IT

Python strip () 여러 문자?

ufoet 2020. 11. 29. 12:42
반응형

Python strip () 여러 문자?


문자열에서 대괄호를 제거하고 싶습니다. 이것이 제대로 작동하지 않는 이유는 무엇입니까?

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

여기서는 루프에서 각 방법을 100000 번 사용하여 시간 테스트를 수행했습니다. 결과는 저를 놀라게했습니다. (댓글의 유효한 비판에 대한 응답으로 편집 한 후에도 결과는 여전히 놀랍습니다.)

다음은 스크립트입니다.

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가 아니라면 여전히 가장 읽기 쉬운 것은 아니라고 생각 합니다. 다른 세 가지는 더 분명하지만 속도는 다양합니다.


그게 무슨 일 strip()이니까요. 인수에있는 선행 및 후행 문자를 제거하지만 문자열 중간에있는 문자는 제거하지 않습니다.

다음과 같이 할 수 있습니다.

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

또는:

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

또는 정규식을 사용할 수도 있습니다.

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

string.translate with table = None 잘 작동합니다.

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

strip()제공 한 내용에 따라 후행 및 선행 문자 만 제거 하기 때문입니다. 나는 제안한다 :

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

strip 문자열의 맨 앞과 뒤에있는 문자 만 제거합니다.

문자 목록을 삭제하려면 문자열의 translate메서드를 사용할 수 있습니다 .

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

예를 들어 문자열 s="(U+007c)"

s에서 괄호 만 제거하려면 다음 중 하나를 시도하십시오.

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

참고 URL : https://stackoverflow.com/questions/3900054/python-strip-multiple-characters

반응형