C'è una funzione di libreria string-crollo in Python?
-
12-09-2019 - |
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.
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.