Franja de espacios / pestañas / nuevas líneas - python

94

Estoy tratando de eliminar todos los espacios / pestañas / líneas nuevas en python 2.7 en Linux.

Escribí esto, eso debería hacer el trabajo:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

salida:

I want to Remove all white   spaces, new lines 
 and tabs

Parece una cosa simple de hacer, pero me falta algo aquí. ¿Debería importar algo?

bachurim09
fuente
Consulte la respuesta a esta pregunta relacionada: stackoverflow.com/questions/1185524/… strip () elimina solo los caracteres iniciales y finales, no TODOS los caracteres.
dckrooney
1
podría ser útil: stackoverflow.com/questions/8928557/…
nuevo hasta
1
Esto funcionó para mí, desde el: [¿Cómo recortar los espacios en blanco (incluidas las pestañas)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Respuestas:

124

Usar str.split([sep[, maxsplit]])sin sepo sep=None:

De los documentos :

Si sepno se especifica o lo está None, se aplica un algoritmo de división diferente: las ejecuciones de espacios en blanco consecutivos se consideran como un solo separador y el resultado no contendrá cadenas vacías al principio o al final si la cadena tiene espacios en blanco iniciales o finales.

Manifestación:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

Úselo str.joinen la lista devuelta para obtener este resultado:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'
Ashwini Chaudhary
fuente
57

Si desea eliminar varios elementos de espacio en blanco y reemplazarlos con espacios simples, la forma más fácil es con una expresión regular como esta:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

A continuación, puede eliminar el espacio final con .strip()si lo desea.

MattH
fuente
13

Usa la biblioteca re

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

Salida:

Quiero eliminar todos los espacios en blanco, nuevas líneas y pestañas

Shivam K. Thakkar
fuente
1
Esta es una corrección de la respuesta original dada por @ TheGr8Adakron, no un duplicado
Jesuisme
12
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs
Manish Mulani
fuente
4
esto también elimina ';'
enero
10

Esto solo eliminará la pestaña, las nuevas líneas, los espacios y nada más.

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

SALIDA:

QuieroQuitar todos los espacios en blanco, nuevas líneas y pestañas

¡Buen día!

El Gr8 Adakron
fuente
1
Gracias por la solución. Creo que se necesita una pequeña corrección, debería ser '+' en lugar de '*'.
Sajad Karim
5

Las soluciones anteriores que sugieren el uso de expresiones regulares no son ideales porque esta es una tarea tan pequeña y las expresiones regulares requieren más recursos de los que justifica la simplicidad de la tarea.

Esto es lo que hago:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

o si tuviera que eliminar un montón de cosas, de modo que una solución de una sola línea sería innecesariamente larga:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')
rosstripi
fuente
2

Como no hay nada más complicado, quería compartir esto, ya que me ayudó.

Esto es lo que usé originalmente:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

Resultado no deseado:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

Esto es a lo que lo cambié:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

Resultado deseado:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

La expresión regular precisa que @MattH había mencionado, fue lo que funcionó para mí al encajarla en mi código. ¡Gracias!

Nota: esto es python3

JayRizzo
fuente