Estou tentando remover os três últimos caracteres de uma string em python, não sei quais são esses caracteres, então não posso usar rstrip
, também preciso remover qualquer espaço em branco e converter em maiúsculas
um exemplo seria:
foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()
Isso funciona e me dá BS12, que é o que eu quero, no entanto, se os últimos 4º e 3º caracteres forem os mesmos, eu perco os dois, por exemplo, se foo = "BS11 1AA"
eu conseguir'BS'
exemplos de foo
poderiam ser:
BS1 1AB
bs11ab
BS111ab
A sequência pode ter 6 ou 7 caracteres e preciso eliminar os 3 últimos (assumindo que não há espaço em branco)
Alguma dica?
''.join(foo.split())
é melhor do quefoo.replace(' ', '')
, quando usado em seqüências de caracteres unicode porque remove qualquer caractere de espaço em branco , além do' '
caractere (em particular, os espaços não quebráveis também são removidos). Dito isto,replace()
provavelmente é muito mais rápido, portanto pode ser usado se, digamos, as seqüências de entrada forem codificadas em ASCII, que possui apenas um caractere de espaço (estou usando a terminologia Python 2, aqui.)Não funciona como o esperado, porque a tira é baseada em caracteres. Você precisa fazer isso:
fonte
fonte
Você pode ter entendido um pouco rstrip um pouco, pois ele não retira uma string, mas qualquer caractere que você especificar.
Como isso:
Então, basta usar
(depois de substituir o espaço em branco por nada)
fonte
fonte
Eu tento evitar expressões regulares, mas isso parece funcionar:
string = re.sub("\s","",(string.lower()))[:-3]
fonte
O que há de errado nisso?
fonte
split
slice
concentrate
Este é um bom treino para iniciantes e é fácil de conseguir.
Outro método avançado é uma função como esta:
E para esta pergunta, você apenas deseja remover os últimos caracteres, para poder escrever assim:
Eu acho que você acabou de se preocupar com o que esses três personagens são, então você perdeu. Você só quer remover os três últimos, no entanto, quem são eles!
Se você deseja remover alguns caracteres específicos, pode adicionar alguns julgamentos se:
fonte
Você não está executando as operações na ordem errada? Você exigência parece ser
foo[:-3].replace(" ", "").upper()
fonte
É um pouco do que depende da sua definição de espaço em branco. Eu geralmente chamaria espaço em branco como espaços, tabulações, quebras de linha e retornos de carro. Se esta for sua definição, você deseja usar um regex com \ s para substituir todos os caracteres de espaço em branco:
fonte