RegEx Problem (Anfänger)


der_gniz

Grünschnabel
Hallo,

ich bin am verzweifeln ....
Ich suche den "richtigen" RegEx "String" um eine Menge von Büchern umzunennen.

Die Bücher haben zum Beispiel folgende Namen und sollten danach so aussehen:

Aaranovitch, Ben - Peter Grant 01 - Die Fluesse von London.epub ---> Ben Aaranovitch - Peter Grant 01 - Die Fluesse von London.epub
Abbie, Taylor - Denn niemand wird dir glauben.epub ---> Taylor Abbie - Denn niemand wird dir glauben.epub
Aiken, G. A. - Drachenwandler 01 - Dragon Kiss, Drachen Kuss.epub ---> G. A. Aiken - Drachenwandler 01 - Dragon Kiss, Drachen Kuss.epub

ich möchte also Vor- und Nachname tauschen und das Komma sollte weg;
irgendwie schaffe ich es nicht das das "erste" Komma erkannt wird (es wird immer das letzte erkannt)... wenn mehr als eines vorkommt, ebenso das gleiche mit dem "-" (Minus, Bindestrich)

mein bisheriger Versuch: (.+), (.+) - (.+) und viele weitere erfolglose

wäre schön wenn jemand helfen könnte

Gruß Roland
 

der_gniz

Grünschnabel
Hi Yaslaw,
ich bin begeistert (y)

das mit kein Komma [^,] hab ich verstanden, aber...
was macht das Komma danach ...
\s ist was mit Leerzeichen (Space) aber was macht das \s- am Ende?

wie könnte man das folgende lösen wenn 2 Autoren vorhanden sind?

Achilles, Achim & Joung, Frank - Laufen und Trainieren.epub --> Achim Achilles & Frank Joung - Laufen und Trainieren.epub

gibt es da die Möglichkeit mit "wenn" - "dann"?

Gruß und schönes Wochenende
 

Yaslaw

n/a
Moderator
[^,]+ alles auser Kommas
, gefolgt von einem Komma
\s gefolgt von einem oder mehrere Leerzeichen
[^-]+ alles auser Bindestrich
\s gefolgt von einem Leerzeichen
- Ein Bindestrich.

Ein klarer Pattern. Mit den 2 Namen - Jein, so einfach wirds nicht

Zuerst mit 2 Namen parsen Regex101 - online regex editor and debugger
Code:
^([^,]+?)\s*,\s*([^-&]+?)\s*&\s*([^,]+?)\s*,\s*([^-]+)\s*-
$2 $1 & $4 $1 -
Dann noch die Einzelnamen, gleich wie vorhin.
Ich habe noch auf ungreedy umgestellt (nicht gierig), damit mit mehreren Leerzeichen etc. jeweils nur der Name genommen wird. Regex101 - online regex editor and debugger
Code:
^([^,]+?)\s*,\s*([^-]+?)\s*-
$2 $1 -