문자열에서 모든 공백을 제거하십시오.


787

문자열, 양쪽 끝 및 단어 사이의 모든 공백을 제거하고 싶습니다.

이 파이썬 코드가 있습니다 :

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

그러나 문자열의 양쪽에서 공백 만 제거합니다. 공백을 모두 제거하려면 어떻게합니까?


4
결과는 어떻게 보입니까? hello apple? helloapple?
— Mark Byers

4
@JoachimPileborg, 정확하게 생각하지는 않습니다. 왜냐하면 단어 사이의 공백을 제거하기 때문입니다.
— wal-o-mat

3
helloapple 내 출력이 필요합니다
— co2f2e

8
틀린 경우 수정하지만 "공백"은 "공백 문자"와 동의어가 아닙니다. 정답으로 표시된 현재 답변이 모든 공백을 제거하지는 않습니다 . 그러나 올바른 것으로 표시되었으므로 의도 한 질문에 대답해야합니까? 따라서 답변을 반영하도록 질문을 편집해야합니까? @Kalanamith 모든 공백을 제거 했습니까, 아니면 공백 만 제거 하시겠습니까?
— AnnanFay

답변:


1658

선행 및 끝 공백을 제거하려면 str.strip()다음을 사용하십시오 .

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

모든 공백 문자를 제거하려면 str.replace()다음을 사용하십시오 .

(NB는 "일반"ASCII 공백 문자 만 제거하고 다른 공백 은 제거 ' ' U+0020하지 않습니다 )

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

중복 된 공백을 제거하려면 str.split()다음을 사용하십시오 .

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'

42
이 기능의 가장 큰 장점은 Beautiful Soup에서받은 html 파일에서 '\ r \ n'도 제거한다는 것입니다.
— lsheng

27
나는 "".join (sentence.split ())을 좋아한다. 이것은 문장의 어느 곳에서나 모든 공백 (공백, 탭, 개행)을 제거한다.
— 돈

여기에 초보자. 누군가 print (sentence.join (sentence.split ())) 결과가 'hello hello appleapple'이되는 이유를 설명해 줄 수 있습니까? 여기서 코드가 어떻게 처리되는지 이해하고 싶습니다.
— Yannis Dran

2
@YannisDran str.join () documentation을 확인 하면 호출 sentence.join(str_list)할 때 파이썬에게 str_list의 항목을 sentence구분 기호 로 결합하도록 요청 합니다.
— Cédric Julien

1
"".join(sentence.split())실제로 정식 솔루션이며 단순히 공백이 아닌 모든 공백을 효율적으로 제거 합니다. Mark Byers의 ' 대답 ' 은이 덜 적절한 대답 대신에 받아 들여졌을 것입니다.
— 세실 커리

263

공백 만 제거하려면 다음을 사용하십시오 str.replace.

sentence = sentence.replace(' ', '')

모든 공백 문자 (공백, 탭, 줄 바꿈 등) 를 제거하려면 split다음 을 사용할 수 있습니다 join.

sentence = ''.join(sentence.split())

또는 정규식 :

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

시작과 끝에서 공백 만 제거하려면 다음을 사용할 수 있습니다 strip.

sentence = sentence.strip()

lstrip문자열의 시작 부분에서만 공백을 제거하고 문자열 rstrip의 끝에서 공백을 제거 하는 데 사용할 수도 있습니다 .


참고 : 컴파일 단계를 다시 수행 할 필요가 없으며 컴파일 된 패턴을 re.sub (및 친구)가 캐시합니다. Emil의 답변 도 참조하십시오 .
— Andy Hayden

python3 :yourstr.translate(str.maketrans('', '', ' \n\t\r'))
— deed02392

104

대안은 정규식을 사용 하고이 이상한 공백 문자 도 일치 시키는 것 입니다. 여기 몇 가지 예가 있어요.

단어 사이에서도 문자열의 모든 공백을 제거하십시오.

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

문자열의 시작에서 공백을 제거하십시오.

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

문자열의 끝에서 공백을 제거하십시오.

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

문자열의 시작과 끝에서 공백을 제거하십시오.

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

중복 공간 만 제거하십시오.

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(모든 예제는 Python 2와 Python 3 모두에서 작동합니다)


"\ u202a1234 \ u202c"에서 작동하지 않았습니다. 동일한 출력을 제공합니다 : U '\ u202a1234 \ u202c'
— 살랑

@ 사랑 : 공백 문자가 아니며 (구글에서 볼 수 있음) "일반 구두점"입니다. 내 대답은 공백으로 분류 된 문자를 제거하는 것만 처리합니다.
— Emil Stenström 님이

이것은 내가 여기에 볼 수있는 유일한 솔루션입니다 필요가 없어 그 망할 성가신 유니 코드 공백 문자, 감사 식구들
— CapnShanty

41

공백은 공백, 탭 및 CRLF를 포함 합니다. 우리가 사용할 수 있는 우아하고 1 줄짜리 문자열 함수는str.translate 다음과 같습니다.

파이썬 3

' hello  apple'..translate(str.maketrans('', '', ' \n\t\r'))

또는 철저히 원한다면 :

import string
' hello  apple'..translate(str.maketrans('', '', string.whitespace))

파이썬 2

' hello  apple'.translate(None, ' \n\t\r')

또는 철저히 원한다면 :

import string
' hello  apple'.translate(None, string.whitespace)

2
이것은 다음과 같은 유니 코드 공백에는 도움이되지 않습니다\xc2\xa0
— Suzana

5
ans.translate( None, string.whitespace )나만을 builtins.TypeError: translate() takes exactly one argument (2 given)위해 생산합니다 . Docs는 인수가 변환 테이블이라고 말합니다. string.maketrans ()를 참조하십시오. 그러나 아래 Amnon Harel의 의견을 참조하십시오.
— user405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))참고 :이 작업을 여러 번 수행하려는 경우 트랜스 테이블을 저장하는 변수를 만드는 것이 좋습니다.
— Shogan Aversa-Druesne

16

시작과 끝에서 공백을 제거하려면을 사용하십시오 strip.

>> "  foo bar   ".strip()
"foo bar"

1
질문은 구체적으로 끝 부분뿐만 아니라 모든 공백을 제거하도록 요구합니다. 주의하십시오.
— Shayan Shafiq

9
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK는 이미 위의 "번역"방법을 지적했습니다. 그리고이 변형은 Python 3에서 작동합니다 ( 이 Q & A 참조 ).


2
감사! 또는 xxx.translate( { ord(c) :None for c in string.whitespace } )철저 성을 위해.
— user405

7

조심해:

strip rstrip 및 lstrip을 수행합니다 (앞뒤 공백, 탭, 리턴 및 양식 피드를 제거하지만 문자열 중간에서 제거하지는 않습니다).

공백과 탭만 바꾸면 찾고자하는 것과 일치하지만 보이지 않는 숨겨진 CRLF가 생길 수 있습니다.


3
import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

3
문제는 탭과 줄 바꿈 문자가 포함 된 모든 공백을 제거하는 것이 었습니다.이 코드 조각은 일반 공백 만 제거합니다.
— Maximilian Peters

3

또한 스트립 에는 몇 가지 변형이 있습니다.

문자열의 시작과 끝에서 공백을 제거하십시오.

sentence= sentence.strip()

문자열의 시작에서 공백을 제거하십시오.

sentence = sentence.lstrip()

문자열의 끝에서 공백을 제거하십시오.

sentence= sentence.rstrip()

세 문자열 기능 strip lstrip및 rstrip기본 모든 공백 인 상태, 스트립에 문자열의 매개 변수를 취할 수 있습니다. 이는 특정 작업을 수행 할 때 유용 할 수 있습니다. 예를 들어 공백 만 제거하고 줄 바꿈은 제거 할 수 없습니다.

" 1. Step 1\n".strip(" ")

또는 문자열 목록에서 읽을 때 추가 쉼표를 제거 할 수 있습니다.

"1,2,3,".strip(",")

1

문자열, 양쪽 끝 및 단어 사이의 모든 공백을 제거하십시오.

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

파이썬 문서 :


나는 re이전에 제안 된 것을 알고 있지만 질문 제목에 대한 실제 답변이 다른 모든 옵션 중에서 약간 숨겨져 있음을 발견했습니다.
— 처리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.