Como aparar espaços em branco de uma string?

1157

Como removo o espaço em branco à esquerda e à direita de uma string no Python?

Por exemplo:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Georgy
fonte
17
Esta pergunta me fez falar com colegas de trabalho sobre a remoção por 3 minutos. Para qualquer um que se juntasse no meio do caminho, eles pensariam que estávamos todos trabalhando um pouco no trabalho noturno.
Whitecat 15/09/16

Respostas:

1736

Apenas um espaço ou todos os espaços consecutivos? Se o segundo, as strings já têm um .strip()método:

>>> ' 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'

Se você precisar remover apenas um espaço, poderá fazê-lo com:

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

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

Além disso, observe que também str.strip()remove outros caracteres de espaço em branco (por exemplo, guias e novas linhas). Para remover apenas espaços, você pode especificar o caractere a ser removido como argumento strip, por exemplo:

>>> "  Hello\n".strip(" ")
'Hello\n'
Brian
fonte
19
Se você precisar a função tira, por exemplo, uma função de mapa, você pode acessá-lo através str.strip (), como assim mapear (str.strip, collection_of_s)
Ward
1
Existe uma maneira de aparar apenas os espaços em branco nas extremidades?
Nikhil Girraj 10/07
2
@ killthrush Obrigado pela referência, mas acho que você quis dizer a rstrip()função. :-)
Nikhil Girraj
14
Às vezes, sinto que o python evita propositalmente os nomes bem aceitos e significativos que a grande maioria das línguas usa para serem "únicos" e "diferentes" - em stripvez de trim, em isinstancevez de instanceof, em listvez de arrayetc. etc. Por que não usar os nomes com os quais todos estão familiarizados ?? geez: P
Gershom
3
@GershomMaes no stripcaso, concordo plenamente, mas uma lista é completamente diferente de uma matriz.
JFA
262

Conforme indicado nas respostas acima

myString.strip()

removerá todos os caracteres de espaço em branco à esquerda e à direita, como \ n, \ r, \ t, \ f, space.

Para mais flexibilidade, use o seguinte

  • Remove apenas os caracteres de espaço em branco à esquerda :myString.lstrip()
  • Remove apenas os caracteres de espaço em branco à direita :myString.rstrip()
  • Remove caracteres em branco específicos : myString.strip('\n')ou myString.lstrip('\n\r')ou myString.rstrip('\n\t')e assim por diante.

Mais detalhes estão disponíveis nos documentos

Mudit Jain
fonte
eu acredito é \ r \ n não \ n \ r ... (não pode editar o pós - caracteres não é suficiente modificado)
StefanNch
8
@ StefanNch: A ordem dos caracteres não importa. \ n \ r também removerá \ r \ n.
Johannes Overmann
122

strip também não se limita a caracteres de espaço em branco:

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

Isso removerá todos os espaços em branco iniciais e finais em myString:

myString.strip()
Deniz Dogan
fonte
3
Este post possui apenas código, não explica o que a função faz. Remove espaços em branco à esquerda ou à direita, ou ambos? Remove apenas espaços ou todo tipo de espaço em branco? Você pode fazê-lo remover apenas os espaços então ou existe outra função para fazê-lo? Se ele remover os espaços em branco à esquerda e à direita, você poderá remover apenas um dos dois ou há / existem outras funções para fazer o trabalho? myString.strip()responde a nenhuma das perguntas que afirmei.
EKons
8
Para ser justo, o OP solicitou especificamente um método que remove os espaços em branco iniciais e finais de uma string. Resposta suficiente para mim
Denis Lins
21

Você quer strip ():

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

for phrase in myphrases:
    print phrase.strip()
vezult
fonte
0

Eu queria remover os espaços demais em uma string (também entre a string, não apenas no começo ou no final). Eu fiz isso, porque não sei como fazê-lo de outra forma:

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)

Isso substitui os espaços duplos em um espaço até que você não tenha mais espaços duplos

Marjan
fonte
Embora isso funcione, não seja muito eficiente, use-o em vez disso: stackoverflow.com/a/2077906/1240286
Arklur
0

Não consegui encontrar uma solução para o que estava procurando, por isso criei algumas funções personalizadas. Você pode experimentá-los.

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)))
Mitch
fonte
0

Se você deseja aparar o número especificado de espaços da esquerda e da direita , faça o seguinte:

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"
Dounchan
fonte
0

Isso também pode ser feito com uma expressão regular

import re

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

Como removo o espaço em branco à esquerda e à direita de uma string no Python?

Portanto, a solução abaixo removerá os espaços em branco iniciais e finais, bem como os espaços em branco intermediários. Como se você precisasse obter valores de sequência claros sem vários espaços em branco.

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

Como você pode ver, isso removerá todos os vários espaços em branco da string (a saída é Hello Worldpara todos). A localização não importa. Mas se você realmente precisar de espaços em branco à esquerda e à direita, strip()será encontrado.

Kushan Gunasekera
fonte