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


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 lstriprstrip기본 모든 공백 인 상태, 스트립에 문자열의 매개 변수를 취할 수 있습니다. 이는 특정 작업을 수행 할 때 유용 할 수 있습니다. 예를 들어 공백 만 제거하고 줄 바꿈은 제거 할 수 없습니다.

" 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.