Year-Tag aus Comment-tag filtern

Ich habe comment-tags gefüllt.
In diesen comment-tags sind auch die Inhalte für das year-tag enthalten.

In fast allen Fällen handelt es sich um das erste Auftreten eines Inhaltes in Klammern, also z.B. (1998).
Es müssten also 4 Zeichen nach dem ersten Auftreten einer linken Klammer im Tag comment ins year-tag gebracht werden.
Teilweise gibt es leider auch etliche Fälle, wo schon vor der Jahresinfo im comment-tag eine Klammer auftritt. Fehlerhafte Übernahmen könnten allerdings entscheidend weiter eingeschränkt werden, wenn nur Klammerinhalte mit 4stelligem numerischen Inhalt berücksichtigt und vorherige andere Klammerinhalte ignoriert würden.

Wer hilf einem Noob in Sachen regex?

Letzte Klammer ...

YEAR <== $regexp(%COMMENT%,'^.*\((\d\d\d\d)\).*$','$1')

DD.20151216.1204.CET

Erste Klammer ...

YEAR <== $regexp(%COMMENT%,'^.*?\((\d\d\d\d)\).*$','$1')

DD.20151227.1610.CET

Danke Detlev.
Funktioniert.

Zu früh gefreut.
Nachdem ich mit dem Ausdruck von der Testphase in die "Produktion" gegangen war, musste ich feststellen, dass ein Teil falsche Ergebnisse vorlagen.
Die Untersuchung einer vorliegenden Systematik ergibt, dass in allen Fällen, in denen mehrmals ein entprechender Klammerwert auftritt, offenbar statt des 1. der letzte vorkommende Klammerwert genommen wird.

Sorry, schon korrigiert, siehe oben.

DD.20151227.1612.CET

Nochmals danke Detlev.

Ich schiebe mal eine Aufgabe ähnlicher Art nach.
Ich überlege gerade teilweise weitere Infos aus dem Comment-Tag in spezielle Tag-Felder zu kopieren.
Das Comment-Tag enthält auch Zeilen wie:

Writer:
Producer:
Label:
usw.

Jede dieser Infos steht in einer eigenen Zeile und die Zeile wird mit LF/CR abgeschlossen.
Hinter den Doppelpunkten befindet sich ein Leerzeichen.

Gesucht wir also ein Ausdruck, der den Text hinter dem erstmaligen Auftreten eines bestimmten Strings (z.B. "Writer: ") bis zum nächsten CR/LF zur Weiterverarbeitung liest.

COMMENT <== 'Writer: Ww ww w'$char(13)$char(10)'Producer: Pppp Pppp'$char(13)$char(10)'Label: LL LL LL' $regexp($char(10)%COMMENT%$char(13),'^.*\nWriter:\s*(.+?)\r.*$','$1') ==> 'Ww ww w' $regexp($char(10)%COMMENT%$char(13),'^.*\nProducer:\s*(.+?)\r.*$','$1') ==> 'Pppp Pppp' $regexp($char(10)%COMMENT%$char(13),'^.*\nLabel:\s*(.+?)\r.*$','$1') ==> 'LL LL LL'

DD.20151230.1627.CET

Danke Detlev.
Das funktioniert, obwohl ich immer noch nicht bei den Ausdrücken durchsteige.

"Schönheitsfehler", der eine fehlerfreie Anwendung auf einen Rutsch für alle Files verhindert:
Sofern der entsprechende Eintrag im comment-tag komplett fehlt, also eine entsprechende Zeile mit Label oder Producer oder Writer überhaupt nicht aufweist, wird der komplette Inhalt des comment-tags in den jeweiligen Tag geschrieben.

Ja, das ist so im Mp3tag, wenn ein regulärer Ausdruck keinen Treffer hat, dann liefert er als Ausgabe den unveränderten Eingabestring.

Deshalb vielleicht ... vorher ein Filter anwenden, z. B. ...
COMMENT HAS "Producer:"
oder
COMMENT HAS "Producer:" AND COMMENT HAS "Writer:"
usw.

Oder nach der ersten Zuweisung fragen, ob WRITER gleich COMMENT ist, wenn ja, dann WRITER entfernen, sonst WRITER behalten.
WRITER <== $if($eql(%COMMENT%,%WRITER%),,%WRITER%)
... oder ...
WRITER <== $if($neql(%COMMENT%,%WRITER%),%WRITER%,)

... was voraussetzt, dass %COMMENT% niemals gleich %WRITER% ist.

DD.20160102.1650.CET