Removendo números da string [fechado]
É difícil dizer o que está sendo perguntado aqui. Esta questão é ambígua, vaga, incompleta, excessivamente ampla ou retórica e não pode ser respondida de forma razoável em sua forma atual. Para obter ajuda no esclarecimento desta questão para que ela possa ser reaberta, visite a Central de Ajuda .
Como posso remover dígitos de uma string?
— usuário1739954
Com re:result = re.sub(r'[0-9]+', '', s)
com regex, você precisará adicionar \. também, como pode ser um número decimal, eu acho. como resultado = re.sub (r '[0-9 \.] +', '', s)
— GurhanCagin
"\d"é o mesmo que em uma regex "[0-9]", então você pode fazer result = re.sub(r"\d+", "", s). A velocidade provavelmente dependerá da string em particular sendo usada, mas para mim, re.subdemorou cerca do dobro do tempo str.translate(um pouco mais se você não usar um padrão pré-compilado).
Isso funcionaria para a sua situação?
>>> s = '12abcd405'
>>> result = ''.join([i for i in s if not i.isdigit()])
Isso faz uso de uma compreensão de lista, e o que está acontecendo aqui é semelhante a esta estrutura:
Como @AshwiniChaudhary e @KirkStrauser apontam, você realmente não precisa usar os colchetes no one-liner, tornando a parte entre parênteses uma expressão geradora (mais eficiente do que uma compreensão de lista). Mesmo que isso não atenda aos requisitos da sua tarefa, é algo que você deve ler eventualmente :):
>>> result = ''.join(i for i in s if not i.isdigit())
@SeanJohnson Awesome! Tenho certeza que aprendi isso com outra pessoa neste site, então o ciclo está completo :)
@RocketDonkey não precisa[]
No Python 2.7 e superior, você não precisa dos colchetes ao redor da compreensão da lista. Você pode deixá-los de fora e isso se torna uma expressão geradora.
— Kirk Strauser
Corrigido - obrigado @ AshwiniChaudhary / @ KirkStrauser.
@RocketDonkey adiciona algumas explicações também, apenas ver o código não vai ajudar o OP, eu acho.
E, apenas para jogar na mistura, é o frequentemente esquecido str.translate que funcionará muito mais rápido do que expressões regulares / looping:
s = 'abc123def456ghi789zero0'
res = s.translate(None, digits)
res = s.translate(remove_digits)
Essa abordagem não funcionará no Python3. Em vez disso, faça: 'abc123def456ghi789zero0'.translate({ord(k): None for k in digits})
Melhor solução para Python2.
— Harsh Wardhan de
Não funciona para strings de caracteres Unicode
Não tenho certeza se seu professor permite que você use filtros, mas ...
retorna-
Muito mais eficiente do que looping ...
— Alain Nisam
ele retorna o seguinte: <objeto de filtro em 0x03475FD0>
— lone_coder
— Pavel Paulau
A saída é <filter object at 0x7f749e1745c0>. Python3.6
— TitanFighter
@TitanFighter Você pode coagir o gerador em um objeto de lista, envolvendo aquele objeto retornado do filtro na lista (filtro (...))
— ahlusar1989
Apenas alguns (outros sugeriram alguns deles)
Valeria a pena mostrar uma comparação de eficiência nestes.
Diga st é a sua string não formatada e, em seguida, execute
como acima mencionado. Mas acho que você precisa de algo muito simples, então digamos que s é sua string e st_res é uma string sem dígitos, então aqui está seu código
l = ['0','1','2','3','4','5','6','7','8','9']
Adoraria usar regex para fazer isso, mas uma vez que você só pode usar listas, loops, funções, etc.
aqui está o que eu inventei:
Se eu entendi sua pergunta direito, uma maneira de fazer é quebrar a string em caracteres e, em seguida, verificar cada caractere nessa string usando um loop, se é uma string ou um número e, em seguida, se a string salvá-la em uma variável e depois no loop estiver concluído, exiba isso para o usuário
— Baahubali
Um loop for itera automaticamente através de cada caractere de uma string, portanto, não há necessidade de quebrar a string em caracteres.