Saltar al contenido

Cómo quitar todos los espacios en blanco de string

Nuestro equipo de redactores ha pasado mucho tiempo buscando la resolución a tu interrogante, te regalamos la respuesta por esto deseamos serte de mucha ayuda.

Solución:

Aprovechando el comportamiento de str.split sin parámetro sep:

>>> s = " t foo n bar "
>>> "".join(s.split())
'foobar'

Si solo desea eliminar espacios en lugar de todos los espacios en blanco:

>>> s.replace(" ", "")
'tfoonbar'

Optimización prematura

Aunque la eficiencia no es el objetivo principal (escribir un código claro sí lo es), aquí hay algunos tiempos iniciales:

$ python -m timeit '"".join(" t foo n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"s+", "", " t foo n bar ")'
100000 loops, best of 3: 15.6 usec per loop

Tenga en cuenta que la expresión regular se almacena en caché, por lo que no es tan lenta como se imagina. Compilarlo de antemano ayuda a algunos, pero solo importaría en la práctica si llamas a esto muchos veces:

$ python -m timeit -s 'import re; e = re.compile(r"s+")' 'e.sub("", " t foo n bar ")'
100000 loops, best of 3: 7.76 usec per loop

Aunque re.sub es 11,3 veces más lento, recuerda que tus cuellos de botella seguramente están en otra parte. La mayoría de los programas no notarían la diferencia entre cualquiera de estas 3 opciones.

Para Python 3:

>>> import re
>>> re.sub(r's+', '', 'strip my ntr ASCII and u00A0 u2003 Unicode spaces')
'stripmyASCIIandUnicodespaces'
>>> # Or, depending on the situation:
>>> re.sub(r'(s|u180B|u200B|u200C|u200D|u2060|uFEFF)+', '', 
... 'uFEFFttt strip all u000A kinds of u200B whitespace n')
'stripallkindsofwhitespace'

… maneja cualquier carácter de espacio en blanco en el que no esté pensando, y créanos, hay muchos.

s por sí solo siempre cubre el espacio en blanco ASCII:

  • espacio (regular)
  • pestaña
  • nueva linea (n)
  • retorno de carro (r)
  • alimentación de formulario
  • pestaña vertical

Además:

  • para Python 2 con re.UNICODE activado,
  • para Python 3 sin ninguna acción adicional,

s también cubre los caracteres de espacio en blanco de Unicode, por ejemplo:

  • espacio irrompible,
  • em espacio,
  • espacio ideográfico,

…etc. Consulte la lista completa aquí, en “Caracteres Unicode con la propiedad White_Space”.

Sin embargo s NO cubre caracteres no clasificados como espacios en blanco, que son espacios en blanco de facto, como entre otros:

  • carpintero de ancho cero,
  • separador de vocales mongol,
  • espacio ininterrumpido de ancho cero (también conocido como marca de orden de bytes),

…etc. Consulte la lista completa aquí, en “Caracteres Unicode relacionados sin la propiedad White_Space”.

Entonces estos 6 caracteres están cubiertos por la lista en la segunda expresión regular, u180B|u200B|u200C|u200D|u2060|uFEFF.

Fuentes:

  • https://docs.python.org/2/library/re.html
  • https://docs.python.org/3/library/re.html
  • https://en.wikipedia.org/wiki/Unicode_character_property

Alternativamente,

"strip my spaces".translate( None, string.whitespace )

Y aquí está la versión de Python3:

"strip my spaces".translate(str.maketrans('', '', string.whitespace))

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *