Python Rimuovi gli ultimi 3 caratteri di una stringa


146

Sto cercando di rimuovere gli ultimi 3 caratteri da una stringa in Python, non so cosa siano questi caratteri, quindi non posso usarli rstrip, devo anche rimuovere qualsiasi spazio bianco e convertirli in maiuscolo

un esempio potrebbe essere:

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

Questo funziona e mi dà BS12 che è quello che voglio, tuttavia se gli ultimi 4 ° e 3 ° carattere sono uguali, perdo entrambi, ad esempio se foo = "BS11 1AA"ottengo solo'BS'

esempi di foopotrebbero essere:

BS1 1AB
bs11ab
BS111ab

La stringa può contenere 6 o 7 caratteri e devo eliminare gli ultimi 3 (supponendo che non vi siano spazi bianchi)

Qualche consiglio?

Risposte:


278

Rimozione di tutti gli spazi bianchi:

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

Rimozione degli ultimi tre caratteri:

foo = foo[:-3]

Conversione in lettere maiuscole:

foo = foo.upper()

Tutto quel codice in una riga:

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

9
Vorrei notare che ''.join(foo.split())è meglio di foo.replace(' ', ''), quando usato su stringhe unicode perché rimuove qualsiasi carattere di spazio bianco , oltre al ' 'carattere (in particolare, vengono rimossi anche gli spazi non spezzanti). Ciò detto replace()è probabilmente molto più veloce, quindi può essere usato se, diciamo, le stringhe di input sono note per essere codificate in ASCII, che ha solo un carattere spaziale (sto usando la terminologia di Python 2, qui.)
Eric O Lebigot

90

Non funziona come previsto perché strip è basato sui caratteri. Devi invece fare questo:

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

11
Ciò non rimuove WHITESPACE come richiesto dall'OP; rimuove solo i caratteri SPACE.
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 Sì, strip rimuove solo gli spazi bianchi dall'inizio e dalla fine della stringa.
Eliezer Miron,

Va notato che non è possibile incatenarlo, ad esempio foo [3:] foo [: - 3]
crafter

9

Potresti aver frainteso leggermente rstrip, non spoglia una stringa ma qualsiasi carattere nella stringa che specifichi.

Come questo:

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

Quindi, invece, basta usare

text = text[:-3] 

(dopo aver sostituito gli spazi bianchi con nulla)


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

3

Cerco di evitare le espressioni regolari, ma questo sembra funzionare:

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


1
string.lower () dovrebbe essere string.upper (). Errore mio.
1

questa è l'unica soluzione che affronta bene gli spazi bianchi
Erik Aronesty

1

Cosa c'è di sbagliato in questo?

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

1
  1. split
  2. slice
  3. concentrate

Questo è un buon allenamento per i principianti ed è facile da raggiungere.

Un altro metodo avanzato è una funzione come questa:

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

E per questa domanda, vuoi solo rimuovere gli ultimi caratteri, così puoi scrivere in questo modo:

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

Penso che ti sia preso cura di cosa siano quei tre personaggi, quindi hai perso. Vuoi solo rimuovere le ultime tre, tuttavia chi sono!

Se vuoi rimuovere alcuni caratteri specifici, puoi aggiungerne alcuni se giudizi:

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

0

Non stai eseguendo le operazioni nell'ordine sbagliato? Il tuo requisito sembra esserefoo[:-3].replace(" ", "").upper()


indica quanto segue nell'interrogazione >>> (presupponendo che non vi siano spazi bianchi)
Noctis Skytower

0

Qualche cosa dipende dalla tua definizione di spazio bianco. Generalmente definirei spazi bianchi come spazi, tabulazioni, interruzioni di riga e ritorni a capo. Se questa è la tua definizione, vuoi usare una regex con \ s per sostituire tutti i caratteri bianchi:

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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.