Seite 1 von 1

String splitten

Verfasst: Mittwoch 15. August 2012, 17:05
von x1334
Hallo.

Ich versuche einen String zu splitten, der so aussieht: "abarbeitenKostenpunkt" - logischerweise an der Stelle, an der der Großbuchstabe steht.
Habe es mit re.split versucht aber das löscht leider den Splitchar. (['abarbeiten', 'ostenpunkt'])

Wie komme ich denn hier weiter?

Danke für die Hilfe!

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 17:12
von BlackJack
@x1334: Ich würde sagen das geht mit `re.split()` nicht. Du könntest alle Teilzeichenketten *suchen* die entsprechend aussehen:

Code: Alles auswählen

In [281]: s
Out[281]: 'abarbeitenKostenpunkt'

In [282]: re.findall(r'[A-Z]?[^A-Z]+', s)
Out[282]: ['abarbeiten', 'Kostenpunkt']

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 17:20
von Sr4l
Ersetz doch alle Großbuchstaben durch ein Leerzeichen + den selbigen Großbuchstaben.

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 17:41
von x1334
Und wie mache ich das?
Bekomme es gerade echt nicht hin :(

string.replace("A", " "+ "A") - das funktioniert aber wie mache ich das für alle uppercasebuchstaben auf einmal?

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 17:47
von Hyperion
Das wäre ja auch umständlich... erst einen neuen String bauen, um den dann wieder zu zerlegen... :shock:

BlackJack hat Dir doch einen netten Weg gezeigt, wie man das Problem lösen kann.

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 17:51
von jbs
Oder man schreibt sich eben eine Funktion

Code: Alles auswählen

def split(s, key):
    rv = []
    start = 0
    for i, char in enumerate(s):
        if key(char):
            rv.append(s[start:i])
            start = i
    rv.append(s[start:])
    return rv


print split("halloWelt", key=lambda char: char.isupper())

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 18:38
von BlackJack
@jbs: Dann darf die Zeichenkette nicht mit einem Grossbuchstaben anfangen:

Code: Alles auswählen

In [289]: split('HalloWelt', key=lambda char: char.isupper())
Out[289]: ['', 'Hallo', 'Welt']

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 19:24
von jbs
Es orientiert sich am Verhalten von split:

Code: Alles auswählen

>>> re.split("[A-Z]", "HalloWelt")
['', 'allo', 'elt']

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 19:50
von BlackJack
@jbs: Na das ist deswegen (und wegen den verschluckten Buchstaben) ja auch genau so wenig zu gebrauchen.

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 20:04
von jbs
Es hat eine anadere Semantik. Statt "ich suche Teilstrings" ist es ein "ich möchte Strings splitten, aber das Gesplittete behalten".

Re: String splitten

Verfasst: Mittwoch 15. August 2012, 20:13
von BlackJack
@jbs: Ich weiss jetzt nicht was Du mir damit sagen willst. Also ich verstehe den Satz schon, finde ihn aber ähnlich hilfreich wie „Frösche sind grün” zu diesem Thema. Oder gehst Du tatsächlich davon aus das eine leere Zeichenkette am Anfang des Ergebnisses tatsächlich gewünscht ist‽