Domanda

C'è una funzione di libreria multipiattaforma che sarebbe crollato una stringa multilinea in una stringa a linea singola senza spazi si ripetono?

Sono venuto con qualche elemento di cattura di sotto, ma mi chiedo se non v'è una funzione standard che ho potuto solo di importazione, che è forse anche ottimizzato in 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. Grazie per buone osservazioni. ' '.join(input.split()) sembra essere il vincitore in quanto in realtà corre più veloce di circa due volte nel mio caso, rispetto per la ricerca-sostituzione con una regex r'\s+' precompilato.

È stato utile?

Soluzione

Il built-in metodo string.split() sarà diviso su piste di spazio bianco, in modo da poter utilizzare questo e poi unirsi alla lista risultante utilizzando gli spazi, in questo modo:

' '.join(my_string.split())

Ecco uno script di test completo:

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

Altri suggerimenti

Hai avuto l'idea giusta, è solo bisogno di leggere un po 'più da vicino il manuale di pitone:

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

farà il lavoro. '\n' è una destinazione universale di carattere linea in Python.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top