regex frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dirtylion
User
Beiträge: 19
Registriert: Sonntag 13. März 2011, 13:33

hi,
Ich bin gerade dabei ein kleines get cover script zu bauen was anhand des titels das cover downloaded..
das ganze ist für die dreambox (enigma2) und bezieht sich auf die dreambox eigenen aufnahmen.

ich versuche seit ein paar stunden etwas zu parsen.. leider ohne erfolgt.

Code: Alles auswählen

import re
moviename = "/media/hdd/movie/penter_pan_xvid.ts"

if re.match('.*?.ts', moviename, re.IGNORECASE):
        parsen = re.compile('/(.*?).ts', re.IGNORECASE)
        movie_name = parsen.findall(moviename)
        print "Titel:", movie_name

output: Titel: media/hdd/movie/penter_pan_xvid

eigentlich will ich nur penter_pan_xvid.ts als output bekommen :(

mit einem regsub /media/hdd/movie/ ist es leider nicht getan denn die filme liegen auch in subdir

d.h:
/media/hdd/movie/test/ok/penter_pan_xvid.ts
/media/hdd/movie/test/penter_pan_xvid.ts
/media/hdd/movie/super/ok/noch_mehr/penter_pan_xvid.ts

Eine weitere frage die mich beschäftigt ein lösung weg zur erkennung von mehreren file formaten d.h
wenn *.ts *.avi *.mkv als endung vorkommt sollte er in die if funktion reinspringen..

mit dem lösungsweg geht es leider nicht :(

if re.match('.*?.ts|.*?.avi|.*?.mkv', moviename, re.IGNORECASE):

für eine hilfe wäre ich euch sehr dankbar
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Man kann sich natürlich mit regulären Ausdrücken rumschlagen ...

Code: Alles auswählen

>>> import os.path
>>> os.path.basename("/foo/bar/baz/spam.eggs")
'spam.eggs'
Für dich könnte auch noch das glob-Modul interessant sein.

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@dirtylion: Für das zweite Problem kannst Du auch einfach die `endswith()`-Methode auf Zeichenketten verwenden.
dirtylion
User
Beiträge: 19
Registriert: Sonntag 13. März 2011, 13:33

so ?
if re.match('(.*?.ts|.*?.avi|.*?.mkv)', moviename, re.IGNORECASE):
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

>>> "/foo/bar/baz/spam.eggs".endswith(".eggs")
True
>>> "/foo/bar/baz/spam.eggs".endswith(".dogs")
False
Das Leben ist wie ein Tennisball.
dirtylion
User
Beiträge: 19
Registriert: Sonntag 13. März 2011, 13:33

DANKE an alle !
dirtylion
User
Beiträge: 19
Registriert: Sonntag 13. März 2011, 13:33

Code: Alles auswählen

import os.path
moviename = "/media/hdd/movie/penter_pan_xvid.ts"

if moviename.endswith(('.ts','.avi','.mkv','.iso')):
        moviename = os.path.basename(moviename)
        print "Titel:", moviename
gibt es noch eine weg das endswith mit Case Insensitive arbeitet ?

mit re.IGNORECASE oder (i) komme ich leider nicht weiter :(
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

>>> "test.EGGS".lower().endswith(".eggs")
True
;-)
Das Leben ist wie ein Tennisball.
Antworten