Regulärer Ausdruck gesucht

Begonnen von phantom, 26. Juni 2020, 16:00

⏪ vorheriges - nächstes ⏩

phantom

Hallo,

bei den meisten Downloadfiles werden leider keine Episodentitel angegeben. Beim Abspielen finde ich es sehr praktisch und wichtig, wenn ich weiß wie die Episode im deutschen heißt. Darum benenne ich alle Dateien nach einem bestimmten Schema um. Der sieht dann folgendermaßen aus:

[Serienname].[StaffelEpisode].[Titel].[Format], also bspw. Criminal.Minds.S09E08.Soldat.53699.mkv

Leider machen es einem die meisten Serienführer nicht gerade leicht, wenn man diese Information für seine Zwecke übernehmen will.

Meine erste Anlaufstelle ist fernsehserien.de, die waren früher so nett und boten eine druckbare Version ihrer Episodenübersicht an. Danach folgt serienjunkies.de, leider oft unvollständig und sehr benutzerunfreundlich. Und erst kürzlich, durch diese Seite entdeckt, wunschliste.de.

Jetzt aber zu meinem Problem. Ich suche einen knappen Regex der aus dem folgenden Code-Beispiel (per Select and Copy&Paste von Serienjunkies übernommen) das unten angegebene Ergebnis ausgibt:

Kopierter Text

9x01 25.09.2013
The Inspiration (1)
Inspiration 6.02.2014
9x02 2.10.2013
The Inspired (2)
Zwillinge 13.02.2014
9x03 9.10.2013
Final Shot
Der letzte Schuss 6.02.2014
9x04 16.10.2013
To Bear Witness
Fenster zur Seele 6.02.2014
9x05 23.10.2013
Route 66
Route 66 13.02.2014
9x06 30.10.2013
In The Blood
Hexenjagd 20.02.2014
9x07 6.11.2013
Gatekeeper
Der Nachtportier 27.02.2014
9x08 13.11.2013
The Return
Soldat 53699 6.03.2014
9x09 20.11.2013
Strange Fruit
Der Hass der Jahre 13.03.2014
9x10 27.11.2013
The Caller
Der Anrufer 20.03.2014
9x11 11.12.2013
Bully
Alte Schule 27.03.2014
9x12 15.01.2014
The Black Queen
Black Queen 3.04.2014
9x13 22.01.2014
The Road Home
Am Ende des Weges 4.09.2014
9x14 5.02.2014
200
Blackbird 11.09.2014
9x15 19.02.2014
Mr. & Mrs. Anderson
Die Andersons 18.09.2014
9x16 26.02.2014
Gabby
Freudentränen 25.09.2014
9x17 5.03.2014
Persuasion
Der Doktor 2.10.2014
9x18 12.03.2014
Rabid
Tollwut 9.10.2014
9x19 19.03.2014
The Edge of Winter
Schuldlos 9.10.2014
9x20 2.04.2014
Blood Relations
Die Ehre der Familie 9.10.2014
9x21 9.04.2014
What Happens In Mecklinburg
Schweine und Menschen 16.10.2014
9x22 30.04.2014
Fatal
Lebensfäden 23.10.2014
9x23 7.05.2014
Angels
Himmel oder Hölle? 30.10.2014
9x24 14.05.2014
Demons
Endspiel 6.11.2014

Ergebnis:

01 Inspiration
02 Zwillinge
03 Der letzte Schuss
04 Fenster zur Seele
05 Route 66
06 Hexenjagd
07 Der Nachtportier
08 Soldat 53699
09 Der Hass der Jahre
10 Der Anrufer
11 Alte Schule
12 Black Queen
13 Am Ende des Weges
14 Blackbird
15 Die Andersons
16 Freudentränen
17 Der Doktor
18 Tollwut
19 Schuldlos
20 Die Ehre der Familie
21 Schweine und Menschen
22 Lebensfäden
23 Himmel oder Hölle?
24 Endspiel

Zu beachten ist, dass Leerzeichen (oder allgemein Whitespace) varieren und das Serientitel auch Ziffern enthalten können. Und besonders wichtig ist, dass dieser Regex in einem Texteditor mit "Suchen und Ersetzen" verwendet werden soll der Rückreferenzen (Backreferences) wie $1 beherrscht. Vielleicht kennt sich ja jemand mit Regular Expression aus und ist in dem Bereich echt fitt.

Vielen Dank schon einmal, ich bin gespannt ob es nützliche Anworten geben wird.

FOP

Bitte sehr:

\d{0,1}x(\d{2,3})\s*\d{1,2}\.\d{2}\.\d{4}\s*\n.*\n\s*(.*)\t\d{1,2}\.\d{2}\.\d{4}
Die Nummer steht dann in $1 und der Titel in $2.

phantom

Danke @FOP. Beim Testen bin ich doch prompt über folgenden Text gestolpert, da wurde geschlampt und bei einigen deutschen Titeln das Releasedatum vergessen:

1x01 7.07.2006
Pilot
 Mit einer Ausrede fängt es an 30.10.2007
1x02 14.07.2006
Spellingg Bee
 So spannend kann ein Buchstabierwettbewerb sein! 6.11.2007
1x03 21.07.2006
Speak Now or Forever Hold Your Piece
 Man möge jetzt sprechen ? oder für immer schweigen 13.11.2007
1x04 28.07.2006
Woman Seeking Dead Husband - Smokers Okay, No Pets
 Attraktive Frau sucht toten Mann zwecks Geldanlage 20.11.2007
1x05 4.08.2006
9 Lives
 Katze krallt sich Killer? 27.11.2007
1x06 11.08.2006
Weekend Warriors
 Da möchte man in Frieden Bürgerkrieg spielen ? 4.12.2007
1x07 18.08.2006
Who Ya Gonna Call?
 Ein Geschlechterkampf der etwas anderen Art 12.11.2007
1x08 25.08.2006
Shawn vs. the Red Phantom
 Shawn gegen ?Das Rote Phantom? 18.12.2007
1x09 19.01.2007
Forget Me Not
 Tiere, Menschen, Endstationen 8.01.2008
1x10 26.01.2007
From the Earth to Starbucks
 Erde ruft Lassiter
1x11 2.02.2007
He Loves Me, He Loves Me Not, He Loves Me, Oops He's Dead
 Er liebt mich, er liebt mich nicht, er liebt mich, huch ... er ist tot!
1x12 9.02.2007
Cloudy...Chance of Murder
 Ãœberwiegend wolkig ... gebietsweise Mord
1x13 16.02.2007
Game Set... Muuurder?
 Spiel, Satz ... und Straftat?
1x14 23.02.2007
Poker? I Barely Know Her
 Pokerface gegen Pokerface
1x15 2.03.2007
Scary Sherry: Bianca's Toast
 Zimmer 413: Studentinnen des Todes 4.03.2008

Dev

Hallo,

danke dafür, ich habe da schon einiges Implementiert und schaue mir gerne deinen Regex an :)
Das Episodenfeature ist derzeit bei den meisten Serien noch hidden, kommt aber definitiv wieder.

FOP

Geht sicher noch schöner... Aber vielleicht kannst du damit ja was anfangen:

\d{0,1}x(\d{2,3})\s*\d{1,2}\.\d{2}\.\d{4}\s*\n.*\n\s*(?:(.*)(?:\t| )\d{1,2}\.\d{2}\.\d{4}|(.*))
Die Nummer steht dann in $1 und der Titel in $2 oder $3. Davon wird aber nur einer belegt sein.

Also " $1 $2$3" sollte klappen.

phantom

@FOP vielen Dank für deine Hilfe! Das du die Ausnahme so einfach einfangen konntest, ärgert mich doch einwenig.  ;)  Ich versuche schon seit Tagen da eine vernünftige Lösung zu finden. Mein Problem war jetzt die Zahl im Titel "Zimmer 413: Studentinnen des Todes", ohne das Problem möglicher Zahlen im Titel hätte ich eine brauchbare Lösung gefunden.

\d{1,2}x(\d{2}).*\n.*\n\s(\D*[\?\:\!\-]?)(\d{1,2}\.\d{1,2}\.\d{4})?Die Gruppierung ohne Rückwärtsreferenz "(?:<Regulärer Ausdruck>)" kannte ich noch nicht.

Deinen Code habe ich noch etwas angepasst, damit der überflüssige Leerraum nach dem Titel verschwindet.

phantom

Ich habe mir jahrelang die Episodenlisten bei Fernsehserien.de als PDF-Dateien ausgeben lassen. Um daraus die Episodentitel für die Staffelpacks zu ziehen. Das klappte immer wunderbar. Doch nun haben die dort etwas geändert und es klappt nicht mehr. Was für ein Jammer. Vielleicht ist das auch Teil des Problems von "Complete oder nicht Complete".

Hier mal als Beispiel die Serie Vagrant Queen:

Auswahl der 1. Staffel aus PDF-Datei

Früher:
1.01 Alte und neue Bekannte
1.02 Sing um dein Leben
1.03 Neue Pläne
1.04 Station 233
1.05 Der Sterzaad
1.06 Requiem für die Republik
1.07 Unerwartete Begegnung
1.08 Mörder an Bord
1.09 Die absolute Macht
1.10 Tötet Lazaro

Aktuell:
1
1.01
Alte und neue Bekannte
A Royal Ass-Kicking
2
1.02
Sing um dein Leben
Yippee Ki Yay
3
1.03
Neue Pläne
Nobody's Queen
4
1.04
Station 233
In a Sticky Spot
5
1.05
Der Sterzaad
Temple of Doom
6
1.06
Requiem für die Republik
Requiem for Republic
7
1.07
Unerwartete Begegnung
Sunshine Express Yourself
8
1.08
Mörder an Bord
No Clue
9
1.09
Die absolute Macht
All Old Things Must Pass - Part 1
10
1.10
Tötet Lazaro
All Old Things Must Pass - Part 2

Ohne Bearbeitung hatte man seine Episodenliste für die Staffel fertig. Und wenn man sich das Ergebnis heute ansieht, der absolute Murks.

maggipur

Wie erstellst du denn die PDF? Die Webseite drucken als PDF?
Könnte Dir kurz nen paar Zeilen python schreiben, um die Namen direkt so ausgegeben zu bekommen.

phantom

Zitat von: maggipur am 24. März 2021, 22:56Wie erstellst du denn die PDF? Die Webseite drucken als PDF?
Könnte Dir kurz nen paar Zeilen python schreiben, um die Namen direkt so ausgegeben zu bekommen.
Genau richtig. Ich ließ mir die Episodenliste anzeigen und druckte sie als PDF aus. Per Regular Expressions habe ich dann die führende Ziffer und Punkt entfernt. Und die Dateiendung ".mkv" hinzugefügt. Das ganze dann als Textdatei abgespeichert.
01 Alte und neue Bekannte.mkv
02 Sing um dein Leben.mkv
03 Neue Pläne.mkv
...

Paria

Seit Fernsehserien sein Design geändert hat kann in Excel die Episodenliste nichtmehr kopieren.
Früher war das Design so:

https://web.archive.org/web/20160429093433/https://www.fernsehserien.de/the-walking-dead/episodenguide
Webarchive zeigt bei allen Serien nur das Design von 2016 an, war aber bis vor 4 Wochen noch bevor sie es umgestellt haben so.

Man hat den Guide genommen, Copy und in Excel, alles war in den Spalten drin nebeneinander.


Jetzt das neue Design
https://www.fernsehserien.de/the-walking-dead/episodenguide

Man kopiert alles in Excel und es haut einen alles untereinander in die Spalten ohne Sortierung.
Weiß einer wie man es hinbekommt, das wieder alles nebeneinander steht?

Anbei 1 Screenshot wie es vorher aussah und jetzt mit dem kopieren. Musste nur noch alles richtig einordnen in die Spalten, hat die Formeln aus H1 und I1 nach unten gezogen fertig. Konnte es dann expotieren in andere Renamer und so damit es die Dateien richtig benennt.

https://i.imgur.com/qC8i1vX.png

Veilleicht ist ja jemand in Excel fit, kann bestimmt neue Formeln durch =Verketten oder so erstellen. So das die Namen in Spalten E und G gesortet werden.

Hier die CSV

https://1fichier.com/?we5dl8tkqkahrx5fe9v3

Die Datei ist clean.




FOP

Mit nem entsprechendem RegEx könnte man das auch einfach umformatieren und somit in Excel einfügbar machen.

phantom

Um mal bei meinem obigen Beispiel Vagrant Queen zu bleiben. Nach dem man die Episodenliste als PDF ausgedruckt hat. Öffnet man die PDF-Datei und markiert bei gedrückter ALT-Taste (damit ist eine Selektion möglich) den gewünschten Bereich und kopiert diese in die Zwischenablage. Anschließend fügt man den Ausdruck in einen Regular Expression fähigen Editor ein. Ich bevorzuge den Emeditor. Das Sieht dann folgendermaßen aus:
1
1.01
Alte und neue Bekannte
A Royal Ass-Kicking
2
1.02
Sing um dein Leben
Yippee Ki Yay
3
1.03
Neue Pläne
Nobody's Queen
4
1.04
Station 233
In a Sticky Spot
5
1.05
Der Sterzaad
Temple of Doom
6
1.06
Requiem für die Republik
Requiem for Republic
7
1.07
Unerwartete Begegnung
Sunshine Express Yourself
8
1.08
Mörder an Bord
No Clue
9
1.09
Die absolute Macht
All Old Things Must Pass - Part 1
10
1.10
Tötet Lazaro
All Old Things Must Pass - Part 2

Im Editor nutzt man nun die Funktion Suchen und Ersetzen (Regular Expression Funktion muss aktiviert sein) um den obigen kruden Ausdruck umzuformen.
 
Suchen:
^\d{1,3}\n(\d{1,3})\.(\d{1,2})\n(.*)\n.*
Ersetzen durch:
Vagrant Queen S01E$2 $3.mkv
Ergebnis:Vagrant Queen S01E01 Alte und neue Bekannte.mkv
Vagrant Queen S01E02 Sing um dein Leben.mkv
Vagrant Queen S01E03 Neue Pläne.mkv
Vagrant Queen S01E04 Station 233.mkv
Vagrant Queen S01E05 Der Sterzaad.mkv
Vagrant Queen S01E06 Requiem für die Republik.mkv
Vagrant Queen S01E07 Unerwartete Begegnung.mkv
Vagrant Queen S01E08 Mörder an Bord.mkv
Vagrant Queen S01E09 Die absolute Macht.mkv
Vagrant Queen S01E10 Tötet Lazaro.mkv

subby

Sehr cool, in Kombination mit dem TotalCommander und der Umbenennung mit "Namen aus Datei laden" spart das sicherlich einiges an Arbeit. Obwohl TotalCommander ist da ja eigentlich überflüssig.

Auf jeden Fall finde ich es sehr interessant, wie ihr das aufschlüsselt. :)

Wundert mich, dass es noch kein Tool gibt, was das alles ausliest und Dateien nach einem vorgegebenen Muster benennt. ^^

m4rcy

Zitat von: subby am 07. April 2021, 18:39Sehr cool, in Kombination mit dem TotalCommander und der Umbenennung mit "Namen aus Datei laden" spart das sicherlich einiges an Arbeit. Obwohl TotalCommander ist da ja eigentlich überflüssig.

Auf jeden Fall finde ich es sehr interessant, wie ihr das aufschlüsselt. :)

Wundert mich, dass es noch kein Tool gibt, was das alles ausliest und Dateien nach einem vorgegebenen Muster benennt. ^^

Filebot kann das komplett automatisch, nach eigenem Muster. Kostet allerdings Geld 🙃 nimmt als Quelle dann Tvdb oder themoviedb

phantom

Zitat von: subby am 07. April 2021, 18:39Sehr cool, in Kombination mit dem TotalCommander und der Umbenennung mit "Namen aus Datei laden" spart das sicherlich einiges an Arbeit.
Ich machs in der Tat genau wie du es beschreibst. :)