Nur letzten Klammerausdruck suchen&ersetzen?

Hallo,

vieles konnte ich bereits durch Forumsbeispiele in mp3tag lösen. Bei dieser Aufgabe komme ich jedoch nicht voran.

Meine zwei TITLE lauten beispielsweise

House Music (Move Your Body) (Muzzaik Remix)
Buzz Me (Bruno Barudi Remix)

Nur der letzte Ausdruck in runden Klammern enthält die Mix-Angabe und soll in eckige Klammern gefasst werden, der Inhalt wird dabei übernommen wie vorgegeben, also

House Music (Move Your Body) [Muzzaik Remix]
Buzz Me [Bruno Barudi Remix]

Mit diesem regulären Ausdruck

(.*)$

glaubte ich, von rechts den ersten Treffer einer runden Klammer sicher greifen zu können... Pustekuchen.

Gibt es eine Lösung, die in beiden Fällen greift? Oder benötige ich mehrere reguläre Ausdrücke? Und kann ich ggf. die Umwandlung "runde" in "eckige Klammern" davon abhängig machen, dass bestimmte Begriffe wie "Mix" vorkommen?

Ich steh auf dem Schlauch...

Besten Dank für eure Hilfe!

Einen ersten Ansatz habe ich nach einigem Herumprobieren gefunden: Mit

(()([\w\s]*)())$

greife ich auf http://regexr.com/ nur den letzten Klammerausdruck... komme nur bislang nicht darüberhinaus :angry:

Vorschläge?

Probier mal
such-string: (.) ((.?))$
Ersetzen-String:$1 [$2]

Sollte für beide Fälle gehen.

Danke! Das klappt.

Weil die Leerzeichen vor den Klammern nicht immer eindeutig gesetzt sind, habe ich das Beispiel wie folgt abgewandelt:

Such-String: (.)((.?))$
Ersetzen-String: $1[$2]

Zwischenzeitlich hatte ich bereits über die "any character except"-Maskierung auch diesen Ausdruck für gültig befunden:

Such-String: (.)(([^(]))$
Ersetzen-String: s.o.

Mein Such-String ist etwas länger. Und bei Deinem ist mir nicht klar, welche Bedeutung das hinten angestellte Fragezeichen hat. Laut mp3tag-Hilfe ist ein Wiederholerzeichen "keinmal oder einmal", nur dass der Stern ebenfalls ein Wiederholerzeichen ist... ich würd's gern verstehen.

Und welche Möglichkeiten habe ich, das Ersetzen des letzten Klammer-Ausdrucks davon mitabhängig zu machen, dass bestimmte Signalwörter wie "Mix" vorkommen?

Mein Gefühl sagt mir, dass hier eine "pipe" notwendig wäre... ich kenn mich nur nicht damit aus :angry:

Vorschläge?

Hallo peilung,

ich habe die Remixe, Versions etc. auch immer in eckigen Klammern. Dafür benutze ich folgende Aktion.

Aktionstyp: Ersetzen mit regulären Ausdrücken
Feld: TITLE
Regulärer Ausdruck: (([^(](?:Acoustic|Bonus|Cut|Dub|Edit|Extended|Instrumental|mix|P(?:ar)?t.?|Version)[^)]))
Treffer ersetzen durch: [$1]
[ ] Groß-/Kleinschreibung berücksichtigen

Hierbei wird nach diversen Stichworten innerhalb runder Klammern gesucht. Die Stichworte werden durch | getrennt.

Vllt. auch ganz interessant für dich:
Ich hatte mal meine Prozeduren vorgestellt um eine Hilfestellung für Anfänger zu bieten. Aller Anfang ist halt schwer :wink: Dort ist dieses Beispiel auch zu finden.

Anfängerhilfe zu Skriptbefehlen und Ordnerstruktur

Bei Bedarf kann ich meine hochgeladenen Aktionen dort auch aktualisieren.

Mit freundlichen Grüßen

FredHermann

Hallo FredHermann,

ich danke Dir für Deine Hinweise. Und ja, die eckigen Klammern sind eine gute Hilfe. Offenbar sind wir auf einer Wellenlänge, was die Tags betrifft (für mich sind die RAK-Musik eine wichtige Orientierung).

Deine Hinweise werde ich mir in Ruhe durchlesen müssen. Ist eine Menge Lesestoff - und das Zusammenspiel einiger RegEx-Zeichen ist mir noch nicht klar.

In jedem Fall auch Dir meinen Dank. Fragen werden wohl folgen...

Viele Grüße,

peilung

Das Fragezeichen schaltet die "Gierigkeit" des regulären Ausdrucks ab. Damit wird wirklich nur die hintere Klammer genommen und nicht der größtmögliche String zwischen schließender und öffnender Klammer.

Ich danke Dir für Deine Ausführunge!

zwar hatte ich davon in der Hilfe gelesen, nur hatte ich es im konkreten Beispiel nicht erkannt. Nun wird's klar.

Gruß & schönen Abend,

peilung

Hallo FredHermann,

ich habe gerade dies ausprobiert... und es klappt! Ist schon mächtig praktisch, weil es zugleich eine Art Inhaltskontrolle ist.

Besten Dank!

peilung

So, das Grundgerüst funktioniert.

Meine nächste Frage ist, ob MP3TAG einen RegEx-Debugger hat. Ich finde es ziemlich mühsam, eine Aktion fertig zu machen und danach nur über das "erfolgreich"/"klappt nicht" beurteilen zu können.

Zudem habe ich festgestellt, dass ich die Zusatzkünstler ("Featured Artists") im Title-Tag deponiere. Daher kann ich mit den an dieser Stelle vorgestellten Hinweisen meine Frage nicht abschließend lösen.

Konkret:

Kann ich in $strstr auch mit einer Pipe arbeiten, um mehrere Werte zum Vergleich heranzuziehen? In diesen Beispielen finde ich $strstr(%artist%,'feat.'). Für mich wäre jedoch auch das "&" ein Suchbegriff, hinter dem ein Künstler stehen kann, also sinngemäß $strstr(%artist%,'feat.'|'&').

Wenn ich dann den Teil mit den Zusatzkünstlern gegriffen habe, wie ergänze ich den zu Beginn meines Versionshinweises, innerhalb der eckigen Klammer und mit Satzpunkt vor dem weiteren Klammerinhalt? Dazu besser ein Beispiel:

(vorher)
ARTIST:Felix Jaehn feat. Thallie Ann Seenyen
TITLE:Dance With Me [Original Mix]

(nachher)
ARTIST:Felix Jaehn
TITLE:Dance With Me [feat. Thallie Ann Seenyen. Original Mix]

Irgendwie stehe ich mit den String-Manipulatoren noch auf Kriegsfuß :angry:

Besten Dank für jede Hilfe.

Zu dem Dauerthema "feat" nach sonstwohin verschieben gibt es hier einige Hinweise, tw. auf Englisch, aber die Anweisungen sind zu verstehen:
/t/17521/1

Du kannst die Funktion Konverter>Tag-Tag als debugger verwenden, indem du dort den Ausdruck
$regexp(zu durchsuchender string,suchstring,ergebnisstring) als Formatstring einträgst.

Step 1. Action "Guess values" Source format: %TITLE%' '$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft\.?|feat\.?|featuring)\s+([^][(){}]+)[])}]?(\s+.+)?$','(feat. $2$3)===$1',1) Guessing pattern: %TITLE%===%ARTIST% From: ARTIST = 'Felix Jaehn feat. Thallie Ann Seenyen' TITLE = 'Dance With Me [Original Mix]' To: ARTIST = 'Felix Jaehn' TITLE = 'Dance With Me [Original Mix] (feat. Thallie Ann Seenyen)' Step 2. Action "Format value" Field: TITLE Formatstring: $regexp(%TITLE%,'^(.+?)\s+\[(.+?)\]\s+[[({]?(?:ft\.?|feat\.?|featuring)\s+([^][(){}]+)[])}]?$','$1 [feat. $3. $2]',1) ... or ... Formatstring: $regexp(%TITLE%,'^(.+?)\s\[(.+?)\]\s\(feat\.\s(.+?)\)$','$1 [feat. $3. $2]',1) ... or ... Formatstring: $regexp(%TITLE%,'^(.+?)\s\[(.+?)\]\s\((feat\.\s.+?)\)$','$1 [$3. $2]',1) From: TITLE = 'Dance With Me [Original Mix] (feat. Thallie Ann Seenyen)' To: TITLE = 'Dance With Me [feat. Thallie Ann Seenyen. Original Mix]'

Siehe auch ...
Move "Featuring" from Artist to Title

DD.20160113.2123.CET

Mein großes Dankeschön an euch, ohrenkino, FredHermann und DetlevD! Ich hätte es zunächst nicht geglaubt - und doch wurde meine Frage vollständig beantwortet... mit hohem Lerneffekt für mich.

Dieser Tipp ist superpraktisch und hat mir für die weitere Arbeit vieles erleichtert.

Ja, anhand der Beispiele habe ich einiges verstanden, auch wenn mir noch eine Einstiegshilfe fehlte.

Dank dieser Einstiegshilfe sowie den passend geposteten Beispielen konnte ich dann durch geringfügige Anpassungen folgendes Aktionsset anlegen:

Name der Aktionengruppe: Extra-Künstler von ARTIST zu TITLE (feat. und &-with)

Aktion #1:
Aktionstyp: Ersetzen mit regulären Ausdrücken
Feld: TITLE
Regulärer Ausdruck: (([^(](?:Acoustic|Bonus|Cut|Dub|Edit|Extended|Instrumental|Live|mix|Skit|Unplugged|Versi
on)[^)]
))

Treffer ersetzen durch: [$1]

[ ] Groß-/Kleinschreibung berücksichtigen

Aktion #2:
Aktionstyp: Tag-Felder importieren
Quellformat: %TITLE%' '$regexp(%ARTIST%,'^(.+?)\s+[[({]?&\s+([^][(){}]+)[])}]?(\s+.+)?$','(with $2$3)===$1',1)
Formatstring: %TITLE%===%ARTIST%

Aktion #3:
Aktionstyp: Tag-Felder formatieren
Feld: TITLE
Formatstring: $regexp(%TITLE%,'^(.+?)\s[(.+?)]\s((with\s.+?))$','$1 [$3. $2]',1)

Aktion #4:
Aktionstyp: Tag-Felder importieren
Quellformat: %TITLE%' '$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft.?|feat.?|featuring)\s+([^][(){}]+)[])}]?(\s+.+)?$','(feat. $2$3)===$1',1)
Formatstring: %TITLE%===%ARTIST%

Aktion #5:
Aktionstyp: Tag-Felder formatieren
Feld: TITLE
Formatstring: $regexp(%TITLE%,'^(.+?)\s[(.+?)]\s((feat.\s.+?))$','$1 [$3. $2]',1)

Zwei Dinge sind hervorzuheben. Erstens sind bei mir auch die Ausführungsformen "Live", "Unplugged" und "Skit" als relevantes Muster enthalten. Und zweitens sind bei mir auch Gruppenpartner, die mit dem Firmenund "&" angeführt sind, Extrakünstler. Das führt jedoch teilweise zu blöden Ergebnissen, die ich von Hand nachbessern muss... nämlich, wenn Gruppen sinngemäß "Salt & Pepper" oder "Jam & Spoon" heißen. Dieses muss ich von Hand dann zurückbessern, was in Summe jedoch weniger aufwändig ist, als alle "&"-Erweiterungen rüberzuheben.

Alles habe ich noch nicht verstanden, doch das wird durch weitere Umsetzung (hoffentlich) noch kommen.

Also lieben dank an alle & bis zur nächsten Frage :rolleyes:

peilung