Hallo
ich habe folgendes problem was ich weder über Suchfunktion noch Manuals in angemessener Zeit lösen konnte.
Mein String hat zB folgende Gestalt:
st = 'ABC_defgh_IjklmnR28'
Bitte beachtet die groß und Klein - Schreibung.
diesen string würde ich gerne umformatieren zu folgender Gestalt:
erg = Ijklmn_R28_defgh
Nun ....wie kann ich das R28 rausholen??
Das Dumme ist strings wie : 'ABC_defgh_Ijklmn33'
sollen nicht nach dem schema umformatiert werden: --> Ijklmn33_defgh
ich denke die einzige Möglihckeit ist irgendwie mit regular expressions nach Uppercase zu suchen..
Ginge es so zu suchen:
°Von hinten anfangen
°Wenn Zahlen dann solange nach links bis Buchstabe
° Ist Buchstabe Großbuchstabe dann nach Schema trennen
wäre das mit regex = '[A_Z]' so möglich?
Danke euch für eure Hilfe!!!
Regex --> Upper Lower case
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie wäre es den string umzudrehen: st[::-1]? *g*Anonymous hat geschrieben:Ginge es so zu suchen:
°Von hinten anfangen
Ich bin zwar nicht der Regex Spezialist, aber das sollte doch wohl eher [A-Z], oder besser \W sein, oder? Ich tät ja sowas nehmen: \W\d\dAnonymous hat geschrieben:wäre das mit regex = '[A_Z]' so möglich?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Gast,
Ich würde versuchen den String entspechend mit re.findall() zu zerlegen und wenn dann dabei das Ergebnis drei Strings enthält diese zusammenzuführen.
Gruß
Dookie
Ich würde versuchen den String entspechend mit re.findall() zu zerlegen und wenn dann dabei das Ergebnis drei Strings enthält diese zusammenzuführen.
Code: Alles auswählen
st = 'ABC_defgh_IjklmnR28'
tmp = re.findall(r"[A-Z]+_([a-z]+)_([a-zA-Z]+?)([A-Z][0-9]+)", st)
if tmp and len(tmp[0]) == 3:
erg = tmp[0][1] + "_" + tmp[0][2] + "_" + tmp[0][0]
else:
erg = st
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Leonidas,
\W findet alle Nichtwortzeichen, also alle Zeichen ausser _[0-9][a-z][A-Z]
Für Grossbuchstaben musst du [A-Z] verwenden.
Gruß
Dookie
\W findet alle Nichtwortzeichen, also alle Zeichen ausser _[0-9][a-z][A-Z]
Für Grossbuchstaben musst du [A-Z] verwenden.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ups, da habe ich wohl was falsch verstanden.Dookie hat geschrieben:\W findet alle Nichtwortzeichen, also alle Zeichen ausser _[0-9][a-z][A-Z]
Für Grossbuchstaben musst du [A-Z] verwenden.
[X] Fixed.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann hätte ich noch eine Frage:
ich habe folgendes:
Wie kann ich hier den Artist vom Titel trennen? Das dumme ist ja, das hat scheinbar nur die Regel, dass der Künstler groß geschrieben ist und der Titel komplett klein.
ich habe folgendes:
Code: Alles auswählen
st = "Tainted love von SOFT CELL"
st2 = "LENNY KRAVITZ: Stillness of heart"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi Leonidas!
Das Problem ist auch dass das von im ersten String weder zum Titel noch zum Interpreten gehört. Oder kommt immer entweder ein : oder ein von vor. Dann könntest Du die Strings ja einfach nach den beiden splitten.
Den Interpreter ermittelst Du dann einfach mit isupper().
Gruß, mawe
Das Problem ist auch dass das von im ersten String weder zum Titel noch zum Interpreten gehört. Oder kommt immer entweder ein : oder ein von vor. Dann könntest Du die Strings ja einfach nach den beiden splitten.
Den Interpreter ermittelst Du dann einfach mit isupper().
Gruß, mawe
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich hab jetzt mit [A-Z]{2,} den Artist abgetrennt und das läuft jetzt, zumindest solange, wie die Sender ihre Seiten gescheit formatieren und nicht auf einmal sowas scheiben: "JAY - Z: LINKIN PARK", wo dummerweise der Titel fehlt.
Danke trotzdem.
Danke trotzdem.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ist nicht so das Gelbe vom Ei, filtert aber wunschgemäß...
Code: Alles auswählen
import re
st = "Tainted love von SOFT CELL"
# st = "LENNY KRAVITZ: Stillness of heart"
st = st.split(" ")
for i in st:
t = "".join(re.findall("([A-Z])", i))
if len(t)>2:
print t,
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Meine Lösung war:
Nur die Replaces nerven mich ein wenig.
Code: Alles auswählen
def splittrack(trackname):
artistmatch = re.compile(r'[A-Z]{2,}')
artist = artistmatch.findall(trackname)
artist = reduce(lambda x, y: x + ' ' + y, artist)
title = trackname.replace(artist, '')
title = title.replace('von', '')
title = title.replace(':', '')
title = title.strip()
return (artist, title)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice