Python Remove os últimos 3 caracteres de uma string


146

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 foopoderiam 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?

Respostas:


278

Removendo todo e qualquer espaço em branco:

foo = ''.join(foo.split())

Removendo os últimos três caracteres:

foo = foo[:-3]

Convertendo em letras maiúsculas:

foo = foo.upper()

Todo esse código em uma linha:

foo = ''.join(foo.split())[:-3].upper()

9
Gostaria de observar que ''.join(foo.split())é melhor do que foo.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.)
Eric O Lebigot

90

Não funciona como o esperado, porque a tira é baseada em caracteres. Você precisa fazer isso:

foo = foo.replace(' ', '')[:-3].upper()

11
Isso não remove o WHITESPACE conforme solicitado pelo OP; remove apenas caracteres ESPAÇO.
John Machin

15
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

2
@Lidia Sim, a tira remove apenas os espaços em branco do início e do fim da string.
Eliezer Miron

Deve-se observar que você não pode encadear isso, por exemplo foo [3:] foo [: - 3] #
crafter

9

Você pode ter entendido um pouco rstrip um pouco, pois ele não retira uma string, mas qualquer caractere que você especificar.

Como isso:

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

Então, basta usar

text = text[:-3] 

(depois de substituir o espaço em branco por nada)


3
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

3

Eu tento evitar expressões regulares, mas isso parece funcionar:

string = re.sub("\s","",(string.lower()))[:-3]


1
string.lower () deve ser string.upper (). Meu erro.
krs1

esta é a única solução que endereços whiteSpace bem
Erik Aronesty

1

O que há de errado nisso?

foo.replace(" ", "")[:-3].upper()

1
  1. split
  2. slice
  3. concentrate

Este é um bom treino para iniciantes e é fácil de conseguir.

Outro método avançado é uma função como esta:

def trim(s):
    return trim(s[slice])

E para esta pergunta, você apenas deseja remover os últimos caracteres, para poder escrever assim:

def trim(s):
    return s[ : -3] 

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:

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

0

Você não está executando as operações na ordem errada? Você exigência parece serfoo[:-3].replace(" ", "").upper()


Os pontos no seguinte na pergunta >>> (assumindo que o espaço não é branca)
Noctis Skytower

0

É 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:

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.