Ersetze alles nach eckiger Klammer mit *nix*

Hallo,
ich bräuchte mal eure hilfe.
ich habe einige dateien in denen im id3tag im titel nach einer ] noch informationen kommen die ich gerne löschen würde wollen.
z.b. Artist - titel [xyz version] bla bla bla

nun wäre mein anliegen, alles nach der ] zu entfernen.

kann wer helfen ?
vielen dank.

Hi,

Aktion: Ersetzen mit regulärem Ausdruck
Feld: Was du brauchst
Regulärer Ausdruck: (.*\]).*
Treffer ersetzen durch: $1

mfG
gnor

perfect, dankeschön

Hallo,

ich habe ein ähnliche Problem: und zwar stehen immer wieder sachen wie [Exclusive], [Album] etc. pp. in meinen Tags und ich würde gern diese Sachen entfernen komme aber nicht wirklich weiter.
D.h. ich schaffe es zwar die Strings durch einen anderen String zu ersetzen aber eben nicht zu entfernen. - Wer kann helfen?

Bsp.: "Title [Album Version]" --> "Title"

PS: Ich würde mich auch freuen, wenn mir jemand mal den Term (.*\]).* von oben erklären könnte, vielleicht komm ich ja dann auch iwann dahinter, wie das funktioniert ... - Oder gibt es sogar hier irgendwo ein Tutorial zu den Regulären Ausdrücken?

Danke im Voraus.

Dann hast du es geschafft. Ersetze einfach mit nichts.

Nein, dass habe ich schon hoffnungslos versucht, es hat weder mit einem leeren String '' noch mit dem Ausdruck $1 geklappt! :unsure:

Das

funktioniert hiermit:

Aktion: Ersetzen mit regulärem Ausdruck
Feld: TITLE
Regulärer Ausdruck: (.*) (\[.*)
Treffer ersetzen durch: $1

Der Inhalt des ersten Subpattern wird ersetzt mit sich selbst ($1)
Der Inhalt des zweiten Subpattern (ab der ersten eckigen Klammer) wird mit nichts ersetzt.

Hallo newser,

erstmal Danke für die Antwort, aber das löst nicht ganz mein Problem. - Ich hab es leider nicht genau erklärt. - Die Klammer steht auch manchmal innerhalb des Tags:

Bsp: "TitleVorn [Album Version] [weitere Info] TitleHinten" --> "TitleVorn [weitere Info] TitleHinten"

D.h. es soll ausschließlich und genau der Teil " [Album Version]" (also mit dem vorangehenden Leerzeichen vor der Klammer) entfernt werden.

Wie kann man das umsetzen? - Danke!

Edit: Mal noch zur weiteren Überlegung - das Ganze soll ja auf eine Masse von titeln angewendet werden, wo bei manchen auch wichtige Info's in den eckigen Klammern stehn, d.h. also es muss genau geprüft werden, ob denn auch " [Album Version]" im Tag zu finden ist und es dürfte also nicht nur nach den eckigen Klammern gesucht werden.

Das hättest du dann schon gleich so detailiert beschreiben können. :wink:

Name der Aktionengruppe: entferne [Album Version]

Aktionstyp: Tag-Felder formatieren
Feld: TITLE
Formatstring: $if($eql($regexp(%title%,(.*) (\'['Album Version\']')(.*),$2),'['Album Version']'),$regexp(%title%,(.*) (\'['Album Version\']') (.*),$1 $3),%title%)

Hallo und Danke für die neue Antwort,

leider muss ich aber berichten, dass der Formatstring nicht funktioniert. - D.h. nach Anwendung auf die Tags steht der Inhalt noch genauso drin ... :frowning: ...

Liegt der Fehler bei mir, oder ist ein Fehler im Formatierbefehl?

Wenn in dieser Zeichenkette
'TitleVorn [Album Version] [weitere Info] TitleHinten'
die Teilzeichenkette
'[Album Version] '
gelöscht also durch Nichts ersetzt werden soll, dann gibt es in Mp3tag mehrere einfache Möglichkeiten, z. B.

  1. Tagfeldinhalt setzen (formatieren).
    Aktionstyp 5: Tagfeld formatieren
    Feld: _FILENAME
    Formatstring: $replace(%_FILENAME%,'[Album÷Version]÷',)

  2. Tagfeldinhalt ersetzen.
    Aktionstyp 2: Ersetzen
    Feld: _FILENAME
    Original: [Album÷Version]÷
    Ersetzen durch:

[_] Nur als Wort ersetzen [_] Groß-/Kleinschreibung berücksichtigen

Hinweis: Ersetze jedes ÷ Sonderzeichen durch ein Leerzeichen.

  1. Tagfeldinhalt ersetzen mittels regulärem Ausdruck.
    ...

Anstelle von _FILENAME im obigen Beispiel dann in Wirklichkeit das Tagfeld benutzen, das bearbeitet werden soll, also z. B. TITLE.

DD.20091010.1919.CEST

(.]). besteht prinzipiell aus zwei Teilen. Der Teil in der Klammer und der danach. Der Ausdruck an sich beschreibt das Aussehen vom String, den du bearbeiten willst. ".]" steht für eine beliebig lange Kette aus beliebigen Zeichen auf die ein "]" folgt. "." steht für eine beliebig lange Kette aus beliebigen Zeichen. "$1" liefert die Zeichen, die durch den Ausdruck in den runden Klammern beschrieben werden, wie newser ja schon erklärt hat.

Ein Tutorial zu regulären Ausdrücken gibt es hier nicht, allerdings sind im Internet ein paar und die Hilfe kann eventuell weiterhelfen.
"matchen" heißt soviel wie "steht für". "Match" ungefähr "Übereinstimmung".

mfG
gnor

Hallo Detlev,

Danke für den Tip! - Ich hatte es genau über diese Funktion schon selber probiert, war aber an dem leeren String gescheitert (siehe oben) - ich bin nicht auf die Idee gekommen einfach nichts hinzuschreiben ... :laughing:

Also vielen Dank - so klappt es jetzt!

Hallo gnor,

also die Hilfe von Mp3Tag hab ich mir schon angeschaut, nur leider bringt mich die nicht wirklich weiter ... Was mir helfen würde wär ein Step-by-Step Einstieg, der ganz klein beginnt und man so langsam auch komplexere Sachen auf die Reihe bekommt.
Aber ich werde mal nach den von dir angesprochenen Tutorials im Web suchen.

Danke auch dir!

Weiterhin allen meinen Helfern einen schönen Sonntag noch! - Danke und Liebe Grüße!

Diese Verwirrung kommt immer wieder deshalb auf, weil es in der Mp3tag Skriptsprache eine leere Zeichenkette nicht gibt, d. h. es fehlt die grundlegende abstrakte Definition für eine leere Zeichenkette.
Mp3tag kennt zwar Literale, die in Hochkomma eingeschlossen werden (können oder sollten), z. B. 'Testliteral', aber man kann kein leeres Literal schreiben. Das ist, wie ich meine, einer von mehreren Designfehlern in der Mp3tag Skriptsprache.

DD.20091011.1150.CEST

Aha, interessant! - Danke für die Aufklärung! :wink:

Hallo zusammen und erstmal ein gesundes Neues!

... aber ich muss das Thema nochmal hoch holen ... Und zwar habe ich ein Problem mit dem entfernen von Informationen ab einem Slash (/). Und zwar verwende ich im Moment den Befehl

(.*)/(.*) -> $1

und das Problem ist, dass ja grundsätzlich alles ab dem letzten Slash im Tag gelöscht wird.

Ich bräuchte aber vielmehr eine Aktion die nur den nachfolgenden Text eines Slashs löscht, der zuvor genau entsprechend in eckigen Klammern stand und diese Erkennung muss absolut dynamisch erfolgen, da die vielen vielen Fälle ja gar nicht abzudecken sind.

Mal ein paar Beispiele:

"Hallo [DYN ERKENNUNG]/DYN ERKENNUNG" -> "Hallo [DYN ERKENNUNG]"

Gleichzeitig muss aber auch folgendes gewährleistet sein:

"Hallo Heute/Morgen" -> "Hallo Heute/Morgen"

"Hallo [DYN ERKENNUNG]/DYN ERKENNUNG (Heute/Morgen)" -> "Hallo [DYN ERKENNUNG] (Heute/Morgen)"

Bitte um Eure Hilfe. - Danke!

$regexp('Hallo [DYN ERKENNUNG]/DYN ERKENNUNG (Heute/Morgen)','^(.+? )(?:(?:\[(.+?)\])\/\2)?(?:|(.+))$','$1$2$3')
gibt: Hallo DYN ERKENNUNG (Heute/Morgen)

$regexp('Hallo [DYN ERKENNUNG]/DYN ERKENNUNG','^(.+? )(?:(?:\[(.+?)\])\/\2)?(?:|(.+))$','$1$2$3')
gibt: Hallo DYN ERKENNUNG

$regexp('Hallo Heute/Morgen','^(.+? )(?:(?:\[(.+?)\])\/\2)?(?:|(.+))$','$1$2$3')
gibt: Hallo Heute/Morgen

DD.20100103.1641.CET

Hallo Detlev,

ich habe deinen Tipp folgendermaßen umgemünzt:

Name der Aktionengruppe: TEST

Aktionstyp: Tag-Felder formatieren
Feld: ALBUM
Formatstring: $regexp(%album%,'^(.+? )(?:(?:\[(.+?)\])\/\2)?(?:|(.+))$','$1$2$3')

und ihn auf folgenden Tag angewendet:

danach sah das Ganze leider so aus:

... was mache ich falsch?

Wenn du den regulären Ausdruck so benutzt hast wie definiert, dann müsste bei deinem neuen Beispiel folgendes Resultat erscheinen:
The Circle [CD ALBUM]/CD ALBUM
Also ohne Änderung, weil die Eingabezeichenkette nicht zum Muster passt.

Mit "The-Circle [CD Album]/CD Album" kommt dann heraus "The-Circle CD ALBUM".

Das ist eben so, wenn man sich das eine wünscht und dann doch was anderes will.

DD.20100104.0406.CET

Versuche es 'mal damit:
$regexp('The Circle [CD Album]/CD Album','^(.+\s+)(?:\[(.+?)\])\/\2(?:|(\s+.+))$','$1$2$3')

DD.20100104.0440.CET

Da dein letzter Lösungsansatz in meiner Anwendung wieder zu einem ähnlichen Ergebnis wie oben führt, glaube ich einfach ich hab mein Problem nicht genau genug geschildert und dass wir irgendwie aneinander vorbei reden ... :unsure: ...

Also mein Problem ist, dass ich ganz oft Tags habe, in denen eine eckige Klammer [ ] vorkommt und hinter dieser Klammer nach einem Slash / noch einmal die selbe Info wie in der Klammer steht. Ich möchte nun generell bei diesen Fällen die doppelte Info nach dem Slash entfernen. Dazu müstte man meines Erachtens untersuchen, ob das Muster

... [beliebiger Text]/selber Text wie in der Klammer ... (Bsp.: ... [aab cd]/aab cd ...)

im Tag vorkommt und falls ja, dass dieser dann zu

... [beliebiger Text] ... (Bsp.: ... [aab cd] ...)

konvertiert wird. Es soll also quasi der doppelt vorkommende Text nach dem Slash, sowie das Slash selber entfernt werden.
Da aber keines Falls vorhersehbar ist, was in der eckigen Klammer stehen kann, kann man keine allgemeine "Löschliste" anlegen, sondern die Aktion müsste selbstständig erkennen ob ein String aus dem vorederen Teil des Tagfeldes (der zudem in eckigen Klammern steht) noch einmal nach den Zeichen "]/" wiederholt wird. Falls ja, sollte das Slash / sowie der wiederholte Stringteil entfernt werden.
(Die eckigen Klammern sollen aber in jedem Fall erhalten bleiben.)

Mal ein paar Beispiele:

  • "The Circle [CD Album]/CD Album" -> "The Circle [CD Album]"
  • "Lovin' You [Europe / Oz 4 Trk]/Europe / Oz 4 Trk" -> "Lovin' You [Europe / Oz 4 Trk]"
  • "Bounce [European Union]/European Union" -> "Bounce [European Union]"
  • "Concert [Live]/Live in London" -> "Concert [Live] in London"
  • "Last Man Standing [Live (Boston, MA 12-10-05)]/Live (Boston, MA 12-10-05)" -> "Last Man Standing [Live (Boston, MA 12-10-05)]"

Allerdings dürfen Tags folgender Art dadurch nicht geändert werden:

  • "Everyday Live/Acoustic"
  • "Help Today/Yesterday [Single Version]"

... ich hoffe ich war diesmal verständlicher ...