Seite 1 von 1
String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 10:22
von jake-the-snake
Morgen Forum
Ich habe wieder mal eine Frage bezüglich eines Strings / einer Zeichenkette.
Angenommen eine beliebige Zeichenkette sieht so aus:
Code: Alles auswählen
cryptocode = ~30240A74288~30240A74310~30240D74290~30240E74327~30240J74325
Im Beispiel also 5 Blockwerte.
Wie kann ich beispielsweise die letzten beiden Blöcke "~30240E74327" und "~30240J74325" abschneiden, wenn der Zwischenraum bei den Würmchen "~" variieren kann? Also mal so "~30240E74327~" oder so "~340E7427~" ist? Stupides von hinten abzählen ist also nicht möglich. Die Grenzen der Blöcke werden durch das Würmchen-Zeichen gesetzt.
Das Dumme ist, das ich im Programm sagen können muss: Schneid mir die letzten 2 Blöcke ab, schneide die letzten 4 Blöcke ab usw...
Ich kenne "split", aber ich will ja nur die letzten Blöcke "splitten" und entfernen - nicht alle...
Wie gehe ich da am besten ran?
Gruss jts
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 10:33
von /me
Ansatz 1: Du baust eine Schleife die von hinten so lange zählt, bis sie die gewünschte Anzahl an Trennzeichen gefunden hat. Danach nimmst du aus dem String von links nur den Bereich, der bis zur Position des ermittelten Trennzeichen geht.
Ansatz 2: Du nimmst split und baust den String hinterher wieder mit join zusammen wobei du die letzten n Elemente wegfallen lässt.
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 10:42
von jake-the-snake
Hallo /me
Hey, vielen Dank. Der 1. Ansatz gefällt mir.
Werde eine Schleife Position für Position (von hinten gezählt) so lange laufen lassen, bis die gewünschte Anzahl an Trennwürmchen gefunden wurde.
Gleichzeitig muss ich ja dann wohl auch einen Zählerwert laufen lassen, aus dem ich die Anzahl der von hinten gezählten Positionen entnehmen kann.
Dieser Zählerwert dient dann zum Abschneiden des Stringendes. Klasse Idee!
Werde mich mal gleich dran setzen.
Vielen herzlichen Dank für deine Hilfe
Gruss jts
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 10:45
von /me
jake-the-snake hat geschrieben:Der 1. Ansatz gefällt mir.
Dann setz den mal um.
Für Variante 2 habe ich spontan folgenden Code geschrieben
Code: Alles auswählen
def remove_parts_from_end(text, no_of_parts, delimiter='~'):
return delimiter.join(text.split(delimiter)[:-no_of_parts])
Das arbeitet in der aktuellen Form nur etwas unerwartet wenn man 0 für die Anzahl der abzuschneidenden Teile angibt.
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 11:17
von Sirius3
@jake-the-snake: dafür kennt `split`, bzw. `rsplit` ein weiteres Argument:
Code: Alles auswählen
cryptocode = "~30240A74288~30240A74310~30240D74290~30240E74327~30240J74325"
cryptocode = cryptocode.rsplit("~", 2)[0]
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 13:14
von /me
rsplit ist natürlich die intelligentere Variante.
Zu meiner Verteidigung: die Kaffeemaschine in der Firma hatte einen Defekt.
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 13:43
von jake-the-snake
Hallo zusammen
Tja, das ist die Strafe, wenn man zu spät ins Forum schaut. Ich habe, nach dem ich verspätet rein gesehen habe, mein riesen Overhead an Schleifen-Konstrukt in die Tonne getreten, und statt dessen von Sirius3, den berühmten "rsplit" genommen
Dennoch Dank an alle.
Eine Zusatzfrage an Sirius3 hätte ich aber:
Ich konnte in keiner Dokumentation deine Zusatzoption "[0]" finden.
Trenner "~" ist klar.
Wie oft getrennt wird ", 2" ist auch klar.
Nur eben die eckige Klammer am Ende würde mich interessieren. Ohne geht's jedenfalls nicht (Hab ich testweise ausprobiert).
Grüsse jts
Re: String kürzen (bei unbekannter Teil-Länge)
Verfasst: Mittwoch 17. Januar 2018, 14:29
von Sirius3
@jake-the-snake: split liefert eine Liste als Ergebnis.