MUT: Umbenennen: erste zwei Wörter vertauschen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

MUT: Umbenennen: erste zwei Wörter vertauschen

Post by *heinzweidrei »

hallo, ich suche einen Code fürs Umbenenn-Tool, mit dem ich die ersten zwie Wörter des Namens vertauschen und mit Komma trennen kann, also z.B.

"the Beatles - let it be" -> "Beatles, the - let it be"
"Robbie Williams - Millenium" -> "Williams, Robbie - Millenium"

Habe ein bisschen rumprobiert, und kann inzwischen mit Suchen und Ersetzen:

"(.*) (.*) - " -> "$2, $1 -"

die meisten Dateien erfassen. Das funzt aber nur, wenn vor dem Bindestrich keine Doppel- oder sonstwie speziellen Namen (Olivia Newton-John, Lana Del Rey) involviert sind, und auch keine komplexeren Künstlernamen wie z.B.

Alex Gaudino & Kelly Rowland
Robin Thicke Ft. T.I. & Pharrell

Weiß da jemand Rat? Ach ja, und wenn es einen Code für "vertausche Wort 2 und 1" gibt, dann sicher auch einen für "stelle Wort 3 an Position 1", oder? Für die Sarah Michelle Gellars dieser Welt (also 2 Vornamen, ein Nachname)...

wäre ganz schön glücklich, wenn es hier eine Lösung gäbe. Diese Stunden des Umbenennens meiner Karaoke Sammlung kürzen meinen Sommer doch empfindlich.

cheers!
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1050
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR »

(\w*)\s(.*)\s-\s(.*)
$2, $1 - $3

klappt schonmal bei Doppelnamen.
Wie sollten Deiner Ansicht nach denn die komlexen Namen gehandhabt werden?

Für Doppelvornamen:
(.*)\s(\w*)\s-\s(.*)
$2, $1 - $3

RegEx ist "gierig" dh es werden sämtliche Buchstaben erfasst, bis das Muster nicht mehr passt. Man kann das ganze natürlich noch expliziter schreiben.
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Re: Umbenennen: erste zwei Wörter vertauschen

Post by *milo1012 »

Für Doppel-Vor- und Nachnamen in einem Rutsch geht z.B. auch:

Code: Select all

([\w\-]+)\s(.+)\s-\s(.+)
$2, $1 - $3
Was davon ausgeht, dass der Vorname immer ein zusammenhängendes Wort ist, optional mit Bindestrich (und immer vorne steht).
Wenn im Namen auch komplexere Dinge vorkommen, wie z.B. Apostroph, füge dieses einfach in die Zeichengruppe ein:

Code: Select all

([\w\-']+)\s(.+)\s-\s(.+)
heinzweidrei wrote:Alex Gaudino & Kelly Rowland
Robin Thicke Ft. T.I. & Pharrell
RegEx ist immer dann gut geeignet wenn es um das Finden von Strings geht.
Für komplexere Regeln muss man sich mit Alternativen (a|b) aushelfen, was schon unübersichtlich wird.
Aber für deinen Fall dürfte das ein Ding der Unmöglichkeit sein, schlicht weil du nie und nimmer mit RegEx wissen kannst,
welcher Teil zu welchem Namen gehört.
Dazu bräuchte es schon eine Namens-Datenbank und ein (komplexes) Skript oder Programm.

ZoSTeR wrote:RegEx ist "gierig" dh es werden sämtliche Buchstaben erfasst, bis das Muster nicht mehr passt.
Hm, TC's RegEx-Engine ist zwar eingeschränkt, aber es stehen doch auch die genügsamen Operatoren zur Verfügung:

Code: Select all

.*? 
.+?
Ist auch so in der Hilfe erwähnt.
TC plugins: PCREsearch and RegXtract
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

hallo,
herzlichen Dank für die schnellen Antworten!
Nun hat es bei mir eine ganze Weile gedauert, bis ich eure Vorschläge ausprobieren konnte. Sie sind für Doppelnamen geeignet, und für die "Lana Del Ray"-Fälle, aber nicht für die komplexeren Namen mit mehreren Künstlern oder längeren Bandnamen.
Wie sollten Deiner Ansicht nach denn die komlexen Namen gehandhabt werden?
-eigentlich braucht es nur die NN, VN Umdrehung des ersten Namens, der andere kann so bleiben. Am meisten würde mir also wirklich ein Code helfen, mit dem ich Wort 1 und Wort 2 in die Form "Wort2, wort1" bringen kann; und für mehre Vornamen eben "Wort3, Wort1, Wort2". Möglichst unabhängig davon was danach kommt; Wenn man das Minus in die Abfrage einbaut, werden mitunter die Doppelnamen mit Bindestrich vertauscht.
Mein größtes Problem ist dabei noch, dass ich eure Codes nicht verstehe. Wäret ihr wohl so nett, die nochmal "auf deutsch" zu schreiben, also die jeweilige Anweisung? Dann könnte ich selbst etwas herumexperimentieren...
Und ja, Milo1012
Aber für deinen Fall dürfte das ein Ding der Unmöglichkeit sein, schlicht weil du nie und nimmer mit RegEx wissen kannst, welcher Teil zu welchem Namen gehört.
Ich fürchte auch, dass ich es nicht automatisiert hinbekomme. Aktuell ist mein Plan, alle Dateien mit
1. Doppel-Nachname
2. mehreren Vornamen eines Künstlers
3. mehreren Künstlern oder sowas wie "Bill Haley and the Comets"
jeweils in einen eigenen Ordner zu schaufeln, und dann jeweils eine RegEx Routine drüber laufen zu lassen. Danke für weitere Hinweise!
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

PS
@Milo1012
Für Doppel-Vor- und Nachnamen in einem Rutsch geht z.B. auch:
Code:
([\w\-]+)\s(.+)\s-\s(.+)
$2, $1 - $3
- klappt nicht. macht aus Nat King Cole -> King Cole, Nat
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

heinzweidrei wrote:- klappt nicht. macht aus Nat King Cole -> King Cole, Nat
Das kann ja auch nicht gehen, denn wie oben gesagt:
milo1012 wrote:Was davon ausgeht, dass der Vorname immer ein zusammenhängendes Wort ist, optional mit Bindestrich (und immer vorne steht)
Versuch mal:

Code: Select all

([\w\-]+\s)+?(.+?)\s-\s(.+?)
Das würde alle Wörter bis auf das Letzte vorm Ende des Namensteil als Vorname nehmen,
hat dann aber wiederum Probleme mit Doppel-Nachnamen, die nicht irgendwie mit Bindestrich und Co. verbunden sind.

Du siehst: es ist eigentlich unmöglich alles in einem Rutsch zu erledigen.
Also: Vorsortieren
TC plugins: PCREsearch and RegXtract
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

salü und vielen Dank nochmal, Milo1012,

mit dem Vorsortieren habe ich mich ja abgefunden...

aber mit ([\w\-]+\s)+?(.+?)\s-\s(.+?) passiert das gleiche.

Nat King Cole wird zu King Cole, Nat und
Missy Elliot feat. Ludacris wird zu Elliot feat. Ludacris, Missy.

das MUT scheint einfach das erste Wort (und das Komma) nach hinten zu stellen, nicht wie gewünscht hinter das verbleibende erste Wort

Woran liegts wohl?

cheers, Heiko
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

heinzweidrei wrote:Nat King Cole wird zu King Cole, Nat und
Missy Elliot feat. Ludacris wird zu Elliot feat. Ludacris, Missy...
Für den ersten Fall hatte ich mich vertan.
Dass es für den zweiten Fall nicht funktioniert ist klar, du müsstest mindestens den Punkt zur Zeichengruppe hinzufügen (\w heißt: nur Buchstaben!),
aber das ist ja wieder ein ganz anderes Schema, weswegen ich nicht weiß was du mit:

Code: Select all

Ludacris, Missy Elliot feat. - ...titel...
anfangen willst.
Deswegen auch hier: gesondert behandeln und anderen Ausdruck nehmen.

Versuch es für den ersten Fall hiermit:

Code: Select all

(([\w\-]+\s?)+)\s(.+?)\s-\s(.+)
$3, $1 - $4
Wenn du

Code: Select all

(([\w\-\.]+\s?)+)\s(.+?)\s-\s(.+)
nimmst geht auch der 2te Fall wie beschrieben (wenn du damit was anfangen kannst).
TC plugins: PCREsearch and RegXtract
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

nee, ich will natürlich

Elliott, Missy feat. Ludacris ... sorry wennich mich unklar ausgedrückt habe. Wort 3 an Stelle 1 ist für die zwei Vornamen das Ziel (Fall 1), bei den anderen mit mehreren Künstlern soll eigentlich bloß das Gleiche passieren wie bei einfachen Vor-Nachnamen-Kombis, also aus

Wort 1 Wort 2 - Titel
soll Wort2, Wort1 - Titel werden. Das mit dem Punkt war nicht in meinem Denken weil ich (vielleicht naiv) dachte es muss doch ne Ex geben die nur die ersten beiden Wörter erfasst, egal was danach kommt... ?
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

an deinem letzten Vorschlag für Fall 1 verschluckt sich übrigens TC komplett, habs jetzt zum vierten Mal versucht, nach Neustart... keine Rückmeldung...
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Langsam wiederholen wir uns...
heinzweidrei wrote:Wort 1 Wort 2 - Titel
soll Wort2, Wort1 - Titel werden. Das mit dem Punkt war nicht in meinem Denken weil ich (vielleicht naiv) dachte es muss doch ne Ex geben die nur die ersten beiden Wörter erfasst, egal was danach kommt... ?
Also:
Einfach nur Wort 1 und Wort 2 vertauschen (vom Anfang aus gesehen) und mit Komma trennen:

Code: Select all

^([\w\-]+)\s([\w\-]+)(.*)
$2, $1$3
Siehe:
https://regex101.com/r/iD1xE4/2

Klappt natürlich nur wenn Vor- und Nachname ein jeweils einzelnes Wort sind (optional mit Bindestrich zusammengesetzt).
ZoSTeR's Vorschlag tat das ja auch schon, allerdings ohne Bindestriche.
Also füge in die eckigen Klammern die Zeichen ein die erlaubt sein sollen.




heinzweidrei wrote:an deinem letzten Vorschlag für Fall 1 verschluckt sich übrigens TC komplett, habs jetzt zum vierten Mal versucht, nach Neustart... keine Rückmeldung...
Unwahrscheinlich...
Was heißt "keine Rückmeldung" konkret? Hängenbleiben? Dateinamen bleiben wie sie sind?
Der Ausdruck funktioniert bei mir ohne Probleme mit einem Dutzend Beispieldateinamen.
Ist vielleicht nicht besonders schnell mit vier Quantifizierern, aber daran sollte es nicht liegen, und es geht mit TC's Engine kaum anders.

Schau dir dazu mal
https://regex101.com/r/hJ1zZ8/2
an.
Dort kannst du dich selbst an RegEx üben.
Optional kannst du auch mein RegXtract-Plug-in zum Offline-Testen nehmen,
allerdings färbt das die Gruppen nicht in unterschiedlichen Farben ein.
TC plugins: PCREsearch and RegXtract
heinzweidrei
Junior Member
Junior Member
Posts: 7
Joined: 2015-08-24, 11:37 UTC

Post by *heinzweidrei »

cool, ganz herzlichen Dank, Milo. Ich probiers die Tage mal aus. Ja, bei dem anderen Code hängte sich TC auf und alles blieb wie es war. Aber mein Rechner muckt eh ganz gern mal....
Bis die Tage! freundlich, Heiko
Post Reply