Pregunta

¿Hay una función de biblioteca multiplataforma que se derrumbaría una cadena de varias líneas en una cadena de una sola línea sin espacios se repiten?

Yo he llegado con un poco de recorte más adelante, pero me pregunto si hay una función estándar que acabo de poder de importación, que es quizás aún optimizado en C?

def collapse(input):
    import re
    rn = re.compile(r'(\r\n)+')
    r = re.compile(r'\r+')
    n = re.compile(r'\n+')
    s = re.compile(r'\ +')
    return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input))))

P.S. Gracias por buenas observaciones. ' '.join(input.split()) parece ser el ganador, ya que en realidad se ejecuta más rápido alrededor de dos veces en mi caso en comparación con buscar-reemplazar con una expresión regular r'\s+' precompilado.

¿Fue útil?

Solución

El método integrado string.split() se dividirá en tramos de espacios en blanco, por lo que puede usar eso y luego unirse a la lista resultante utilizando espacios, como esto:

' '.join(my_string.split())

Aquí hay un script de prueba completa:

TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

print ' '.join(TEST.split())
# Prints:
# This is a test with a mix of tabs, newlines and repeating whitespace

Otros consejos

Usted tuvo la idea correcta, sólo es necesario leer el manual pitón un poco más de cerca:

import re
somewhitespace = re.compile(r'\s+')
TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

somewhitespace.sub(' ', TEST)

'This is a test with a mix of tabs, newlines and repeating whitespace'
multi_line.replace('\n', '')

hará el trabajo. '\n' es un fin universal de carácter de línea en Python.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top