Existe uma função de biblioteca string de colapso em python?
-
12-09-2019 - |
Pergunta
Existe uma função de biblioteca multi-plataforma que entraria em colapso uma seqüência de várias linhas em uma string com uma única linha sem espaços repetindo?
Eu vim com alguns snip abaixo, mas gostaria de saber se existe uma função padrão que eu poderia apenas importação que é talvez ainda otimizada em 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. Obrigado por boas observações. ' '.join(input.split())
parece ser o vencedor como ele realmente corre mais rápido cerca de duas vezes no meu caso comparado a procurar substituir com uma pré-compilada r'\s+'
regex.
Solução
A built-in método string.split()
irá dividir em corridas de espaço em branco, assim você pode usar isso e, em seguida, juntar-se à lista resultante utilizando espaços, como este:
' '.join(my_string.split())
Aqui está um script de teste 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
Outras dicas
Você teve a idéia certa, você só precisava ler o manual python um pouco mais de perto:
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', '')
irá fazer o trabalho. '\n'
é um fim universal do caráter de linha em python.