Y at-il une fonction de bibliothèque string-effondrement en python?
-
12-09-2019 - |
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+'
.
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.