문자열에서 공백을 자르려면 어떻게합니까?


1155

파이썬에서 문자열에서 선행 및 후행 공백을 어떻게 제거합니까?

예를 들면 다음과 같습니다.

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

17
이 질문은 3 분 동안 탈피에 대해 직장 동료들과 대화를 나 had습니다. 다른 사람들에게 반쯤 참여하는 사람들은 우리 모두 밤새 일하는 줄 알았을 것입니다.
Whitecat

답변:


1735

하나의 공백 또는 모든 연속 공백? 두 번째 경우 문자열에는 이미 .strip()메소드가 있습니다.

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # ALL consecutive spaces at both ends removed
'Hello'

그러나 하나의 공간 만 제거 해야하는 경우 다음을 사용하여 수행 할 수 있습니다.

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

또한 str.strip()다른 공백 문자도 제거합니다 (예 : 탭 및 줄 바꿈). 공백 만 제거하려면에 대한 인수로 제거 할 문자를 지정할 수 있습니다 strip.

>>> "  Hello\n".strip(" ")
'Hello\n'

19
스트립 함수 (예 : 맵 함수)가 필요한 경우 다음과 같이 str.strip ()을 통해 액세스 할 수 있습니다. map (str.strip, collection_of_s)
Ward

1
끝에 공백 만 자르는 방법이 있습니까?
Nikhil Girraj

2
@killthrush 참조 해 주셔서 감사하지만 rstrip()함수 를 의미한다고 생각합니다 . :-)
Nikhil Girraj

14
- 파이썬은 의도적으로 잘 수용하고 의미있는 이름을 피처럼 가끔 언어의 대부분은 "독특한"와 "다른"일하기 위해 사용하는 느낌 strip대신 trim, isinstance대신 instanceof, list대신 array, 등, 등 왜 그냥 사용 모두가 친숙한 이름 ?? geez : P
Gershom

3
strip의 경우 @GershomMaes , 나는 완전히 동의하지만 목록은 배열과 완전히 다릅니다.
JFA

262

위의 답변에서 지적했듯이

myString.strip()

\ n, \ r, \ t, \ f, 공백과 같은 모든 선행 및 후행 공백 문자를 제거합니다.

유연성을 높이려면 다음을 사용하십시오.

  • 선행 공백 문자 만 제거합니다 .myString.lstrip()
  • 후행 공백 문자 만 제거합니다 .myString.rstrip()
  • 제거합니다 특정 의 공백 문자 : myString.strip('\n')myString.lstrip('\n\r')또는 myString.rstrip('\n\t')등등.

자세한 내용은 문서 에서 확인할 수 있습니다


나는 \ r \ n 아니라 \ n \ r 믿습니다 ... (포스트를 수정할 수 없습니다-문자가 충분하지 않습니다)
StefanNch

8
@StefanNch : 문자의 순서는 전혀 중요하지 않습니다. \ n \ r도 \ r \ n을 제거합니다.
Johannes Overmann

122

strip 공백 문자로 제한되지 않습니다.

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

54

이렇게하면 다음의 모든 공백 이 제거 됩니다 myString.

myString.strip()

3
이 게시물에는 코드 만 있으며 함수의 기능에 대해서는 설명하지 않습니다. 선행 또는 후행 공백 또는 둘 다를 제거합니까? 공백이나 모든 종류의 공백을 제거합니까? 그런 다음 공백을 제거 할 수 있습니까? 아니면 다른 기능이 있습니까? 선행 및 후행 공백을 모두 제거하는 경우 둘 중 하나만 제거하거나 작업을 수행하는 다른 기능이 있습니까? myString.strip()내가 말한 질문 중 하나에 답하지 않습니다.
EKons

8
공정하게 말해서 OP는 문자열에서 선행 및 후행 공백을 제거하는 방법을 구체적으로 요청했습니다. 나에게 충분한 대답
Denis Lins

21

strip ()을 원합니다.

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

0

문자열에서 너무 많은 공백을 제거하고 싶었습니다 (시작 부분이나 끝 부분뿐만 아니라 문자열 사이). 나는 그렇지 않으면 어떻게 해야할지 모르기 때문에 이것을 만들었다.

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(string)

더 이상 이중 공간이 없을 때까지 한 공간의 이중 공간을 대체합니다.


이것이 효과가 있지만 매우 효율적이지는 않지만 대신 사용하십시오. stackoverflow.com/a/2077906/1240286
Arklur

0

내가 찾고있는 것에 대한 해결책을 찾지 못해 일부 사용자 정의 함수를 만들었습니다. 시도해 볼 수 있습니다.

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)


def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss


def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))


def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()


def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()


s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

0

left 및 right에서 지정된 수의 공백자르 려면 다음을 수행하십시오.

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

0

이것은 정규 표현식으로도 수행 할 수 있습니다

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

0

파이썬에서 문자열에서 선행 및 후행 공백을 어떻게 제거합니까?

따라서 아래 솔루션은 중간 및 공백뿐만 아니라 선행 및 후행 공백을 제거합니다. 여러 공백없이 명확한 문자열 값을 가져와야하는 것처럼.

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

보시다시피 문자열의 여러 공백을 모두 제거합니다 (출력은 Hello World모두입니다). 위치는 중요하지 않습니다. 그러나 실제로 선행 및 후행 공백이 필요한 경우 strip()찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.