Question

Y at-il une fonction de bibliothèque multi-plateforme qui s'effondrer une chaîne multiligne dans une chaîne unique en ligne sans espace de répétition?

Je suis venu avec une snip ci-dessous, mais je me demande s'il y a une fonction standard que je pouvais importer ce qui est peut-être même optimisé 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. Merci pour de bonnes observations. ' '.join(input.split()) semble être le gagnant car il fonctionne en fait environ deux fois plus rapide dans mon cas par rapport à la recherche-le remplacer par un regex précompilé r'\s+'.

Était-ce utile?

La solution

La méthode intégrée de string.split() découpera sur les pistes de blancs, de sorte que vous pouvez l'utiliser, puis se joindre à la liste résultante en utilisant des espaces, comme ceci:

' '.join(my_string.split())

Voici un script de test complet:

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

Autres conseils

Vous avez eu la bonne idée, vous juste besoin de lire le manuel python un peu plus près:

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

fera le travail. '\n' est une extrémité universelle de caractère de ligne en python.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top