Python Entfernen Sie die letzten 3 Zeichen einer Zeichenfolge


146

Ich versuche, die letzten 3 Zeichen aus einer Zeichenfolge in Python zu entfernen. Ich weiß nicht, was diese Zeichen sind, daher kann ich sie nicht verwenden rstrip. Außerdem muss ich Leerzeichen entfernen und in Großbuchstaben konvertieren

Ein Beispiel wäre:

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

Dies funktioniert und gibt mir BS12, was ich will, aber wenn die letzten 4. und 3. Zeichen gleich sind, verliere ich beide, zB wenn foo = "BS11 1AA" ich nur bekomme'BS'

Beispiele für fookönnten sein:

BS1 1AB
bs11ab
BS111ab

Die Zeichenfolge kann aus 6 oder 7 Zeichen bestehen und ich muss die letzten 3 Zeichen löschen (unter der Annahme, dass kein Leerzeichen vorhanden ist).

Irgendwelche Tipps?

Antworten:


278

Entfernen aller Leerzeichen:

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

Die letzten drei Zeichen entfernen:

foo = foo[:-3]

Umrechnung in Großbuchstaben:

foo = foo.upper()

Der ganze Code in einer Zeile:

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

9
Ich möchte darauf hinweisen, dass dies ''.join(foo.split())besser ist als foo.replace(' ', '')bei Verwendung in Unicode-Zeichenfolgen, da zusätzlich zum Zeichen auch Leerzeichen entfernt werden ' '(insbesondere werden auch nicht unterbrechende Leerzeichen entfernt). Das heißt, es replace()ist wahrscheinlich viel schneller, so dass es verwendet werden kann, wenn beispielsweise bekannt ist, dass die Eingabezeichenfolgen in ASCII codiert sind, das nur ein Leerzeichen enthält (ich verwende hier die Python 2-Terminologie)
Eric O Lebigot

90

Es funktioniert nicht wie erwartet, da Strip zeichenbasiert ist. Sie müssen dies stattdessen tun:

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

11
Dadurch wird WHITESPACE nicht entfernt, wie vom OP angefordert. Es werden nur Leerzeichen entfernt.
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 Ja, Strip entfernt nur Leerzeichen vom Anfang und Ende der Zeichenfolge.
Elieser Miron

Es sollte beachtet werden, dass Sie dies nicht
verketten

9

Möglicherweise haben Sie rstrip leicht missverstanden. Es entfernt keine Zeichenfolge, sondern ein beliebiges Zeichen in der von Ihnen angegebenen Zeichenfolge.

So was:

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

Also stattdessen einfach verwenden

text = text[:-3] 

(nach dem Ersetzen von Leerzeichen durch nichts)


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

3

Ich versuche, reguläre Ausdrücke zu vermeiden, aber das scheint zu funktionieren:

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


1
string.lower () sollte string.upper () sein. Mein Fehler.
krs1

Dies ist die einzige Lösung, die Whitespace gut anspricht
Erik Aronesty

1

Was ist daran falsch?

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

1
  1. split
  2. slice
  3. concentrate

Dies ist ein gutes Training für Anfänger und es ist leicht zu erreichen.

Eine andere fortgeschrittene Methode ist eine Funktion wie diese:

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

Und für diese Frage möchten Sie nur die letzten Zeichen entfernen, damit Sie wie folgt schreiben können:

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

Ich denke, Sie müssen sich darum kümmern, was diese drei Charaktere sind, also haben Sie verloren. Sie wollen nur die letzten drei entfernen, trotzdem wer sie sind!

Wenn Sie bestimmte Zeichen entfernen möchten, können Sie einige if-Urteile hinzufügen:

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

0

Führen Sie die Operationen nicht in der falschen Reihenfolge aus? Ihre Anforderung scheint zu seinfoo[:-3].replace(" ", "").upper()


Punkte auf das Folgende in der Frage >>> (unter der Annahme, dass kein Leerraum vorhanden ist)
Noctis Skytower

0

Es hängt etwas von Ihrer Definition von Leerzeichen ab. Ich würde Whitespace im Allgemeinen als Leerzeichen, Tabulatoren, Zeilenumbrüche und Zeilenumbrüche bezeichnen. Wenn dies Ihre Definition ist, möchten Sie einen regulären Ausdruck mit \ s verwenden, um alle Leerzeichen zu ersetzen:

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")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.