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!
String splitten
@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']
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?
Bekomme es gerade echt nicht hin
string.replace("A", " "+ "A") - das funktioniert aber wie mache ich das für alle uppercasebuchstaben auf einmal?
Zuletzt geändert von x1334 am Mittwoch 15. August 2012, 17:48, insgesamt 1-mal geändert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das wäre ja auch umständlich... erst einen neuen String bauen, um den dann wieder zu zerlegen...
BlackJack hat Dir doch einen netten Weg gezeigt, wie man das Problem lösen kann.
BlackJack hat Dir doch einen netten Weg gezeigt, wie man das Problem lösen kann.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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())
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@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']
Es orientiert sich am Verhalten von split:
Code: Alles auswählen
>>> re.split("[A-Z]", "HalloWelt")
['', 'allo', 'elt']
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@jbs: Na das ist deswegen (und wegen den verschluckten Buchstaben) ja auch genau so wenig zu gebrauchen.
Es hat eine anadere Semantik. Statt "ich suche Teilstrings" ist es ein "ich möchte Strings splitten, aber das Gesplittete behalten".
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@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‽