¿Cómo recorto espacios en blanco de una cadena?

1158

¿Cómo elimino los espacios en blanco iniciales y finales de una cadena en Python?

Por ejemplo:

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"
Georgy
fuente
17
Esta pregunta solo me hizo hablar con colegas del trabajo sobre desnudarme durante 3 minutos. Para cualquier otra persona que se uniera a mitad de camino, habrían pensado que todos trabajábamos un poco en trabajos nocturnos.
Whitecat

Respuestas:

1737

¿Solo un espacio o todos los espacios consecutivos? Si es el segundo, las cadenas ya tienen un .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'

Sin embargo, si solo necesita eliminar un espacio, puede hacerlo con:

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

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

Además, tenga en cuenta que también str.strip()elimina otros caracteres de espacio en blanco (por ejemplo, pestañas y líneas nuevas). Para eliminar solo espacios, puede especificar el carácter para eliminar como argumento strip, es decir:

>>> "  Hello\n".strip(" ")
'Hello\n'
Brian
fuente
19
Si necesita la función de tira, por ejemplo, una función de mapa, puede acceder a ella a través de str.strip (), como así map (str.strip, collection_of_s)
Ward
1
¿Hay alguna manera de recortar solo los espacios en blanco en los extremos?
Nikhil Girraj
2
@killthrush Gracias por la referencia, pero creo que te refieres a la rstrip()función. :-)
Nikhil Girraj
14
A veces siento que Python evita deliberadamente los nombres bien aceptados y significativos que usa la gran mayoría de los idiomas para ser "únicos" y "diferentes", en striplugar de trim, en isinstancelugar de instanceof, en listlugar de array, etc., etc. ¿Por qué no usar los nombres con los que todos están familiarizados ?? Dios: P
Gershom
3
@GershomMaes en stripel caso, estoy completamente de acuerdo, pero una lista es completamente diferente de una matriz.
JFA
262

Como se señaló en las respuestas anteriores

myString.strip()

eliminará todos los espacios en blanco iniciales y finales, como \ n, \ r, \ t, \ f, espacio.

Para mayor flexibilidad, use lo siguiente

  • Elimina solo los espacios en blanco iniciales:myString.lstrip()
  • Elimina solo los caracteres de espacio en blanco al final :myString.rstrip()
  • Elimina caracteres específicos de espacios en blanco: myString.strip('\n')o myString.lstrip('\n\r')o myString.rstrip('\n\t')y así sucesivamente.

Más detalles están disponibles en los documentos

Mudit Jain
fuente
creo que es \ r \ n no \ n \ r ... (no se puede editar la publicación - no se modifican suficientes caracteres)
StefanNch
8
@StefanNch: El orden de los personajes no importa en absoluto. \ n \ r también eliminará \ r \ n.
Johannes Overmann
122

strip tampoco se limita a los espacios en blanco:

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

Esto eliminará todos los espacios en blanco iniciales y finales en myString:

myString.strip()
Deniz Dogan
fuente
3
Esta publicación solo tiene código, no explica qué hace la función. ¿Elimina los espacios en blanco iniciales o finales, o ambos? ¿Elimina solo espacios o todo tipo de espacios en blanco? ¿Puedes hacer que elimine solo espacios entonces, o hay otra función para hacerlo? Si elimina los espacios en blanco iniciales y finales, ¿puede hacer que elimine solo uno de los dos, o hay / hay otras funciones para hacer el trabajo? myString.strip()no responde a ninguna de las preguntas que he formulado.
EKons
8
Para ser justos, OP solicitó específicamente un método que elimine los espacios en blanco iniciales y finales de una cadena. Buena respuesta para mí
Denis Lins
21

Quieres tira ():

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

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

Quería eliminar los espacios demasiado en una cadena (también entre la cadena, no solo al principio o al final). Hice esto, porque no sé cómo hacerlo de otra manera:

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)

Esto reemplaza los espacios dobles en un espacio hasta que ya no tenga espacios dobles

Marjan
fuente
Aunque esto funciona, no es muy eficiente, use esto en su lugar: stackoverflow.com/a/2077906/1240286
Arklur
0

No pude encontrar una solución a lo que estaba buscando, así que creé algunas funciones personalizadas. Puedes probarlos.

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

Si desea recortar el número especificado de espacios de izquierda a derecha , puede hacer esto:

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

Esto también se puede hacer con una expresión regular

import re

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

¿Cómo elimino los espacios en blanco iniciales y finales de una cadena en Python?

Entonces, la solución a continuación eliminará los espacios en blanco iniciales y finales, así como los espacios en blanco intermedios también. Como si necesita obtener valores de cadena claros sin espacios en blanco múltiples.

>>> 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 puede ver, esto eliminará todos los espacios en blanco múltiples en la cadena (la salida es Hello Worldpara todos). La ubicación no importa. Pero si realmente necesita espacios en blanco iniciales y finales, entonces strip()sería encontrar.

Kushan Gunasekera
fuente