Inhalte eines Tagfeldes nach bestimmter Zahl entfernen

Hallo :smiley:

Ich bin es mal wieder mit einer etwas komplizierten(?) Frage.

Ich habe verschiedene Tagfelder in denen Einträge folgender Art vorhanden sind:
%occasion%
Reflective (80), Urgent (70), Hopeful (60), Melancholic (50), Contemplative (40)
%mood%
Environment (80), Adaptation (70), Loss (60), Redemption (50), Consequences (40)

Über eine Aktionsgruppe werden die Zahlen, Klammern und Kommas entfernt und alles durch ; getrennt. Das klappt auch so weit. aber bekomme ich es irgendwie über eine Aktion o.ä. hin, dass die Einträge, die Zahlen unter 50 enthalten gelöscht werden?
Dass am Ende also jeweils im Tagfeld folgendes steht:
%occasion%
Reflective; Urgent; Hopeful
%mood%
Environment; Adaptation; Loss

Vielen Dank für die Hilfe :slight_smile:

Bis jetzt habe ich es nur hinbekommen, 1 Angabe mit Zahl unter 60 zu löschen - du müsstest dann ggf. mehrere Durchläufe machen.
Format string: $regexp('Reflective (80), Urgent (70), Hopeful (60), Melancholic (50), Contemplative (40), Hopeful (60)','(.*), (.*\([1-5]\d*\))',$1)
führt zu
"Reflective (80), Urgent (70), Hopeful (60), Melancholic (50), Hopeful (60)"

Ich gehe mal aufgrund Deines Beispiels davon aus, dass immer Inhalte mit der Zahl 60 vorhanden sind und Du durch deine Aktionsgruppe Zahlen, Klammern sowieso schon entfernst und die Kommas ersetzt. In dem Fall könntest Du in deiner Aktionsgruppe eine Aktion vom Typ "Tagfelder importieren" voranstellen:

Quellformat: %occasion%
Formatstring: %occasion% (60), %dummy%

Analog geht das natürlich auch für das Feld MOOD.

Haben die Texte immer die gleichen Zahlen in Klammern?
Also dem Wort "Reflective" folgt immer fix "(80)"?
Oder gibt es auch "Reflective (40)" oder irgendeine andere Zahl?

Wenn die Worte und Zahlen willkürlich sind:
Gilt das auch für deren Position?
Kann die höchste Zahl (in Deinem Beispiel "Reflective (80)" auch zuletzt in %OCCASION% vorkommen und davor tiefere Kombinationen, z.B. Contemplative (40) davor stehen?

Tatsächlich ist es so, dass alle Kombinationen vorkommen können.
Je nach Song wird halt das Thema, das in den lyrics der songs vorkommt genannt und die Zahl dahinter beschreibt wie weit im Vordergrund das jeweilige Thema in den lyrics steht und das ist ja in jedem Song anders.
Reflective (70) bedeutet also, dass das Thema Reflektion 70% des Textes ausmacht. Bei Mood: Aggressive (30) bedeutet, dass z.b. die Stimmung des kompletten Songs 30 % aggressiv ist Es kann aber auch bei anderen Songs nur 40% oder 20% ect. ausmachen. Ich möchte halt nur die Themen oder Moods behalten, die zu mindestens 50% oder mehr vorkommen.

Dein gewünschtes Resultat enthält aber auch die Worte die exakt den Wert 50 enthalten nicht mehr.
Also entweder gilt 1-49 oder 1 bis und mit 50.

Letzteres könnte man über diesen regulären Ausdruck (beinahe) bekommen:
\w+ \((?:[1-9]|[1234][0-9]|50)\)(?:, )?

Für MOOD also z.B.
image

Als Unschönheit bleibt in gewissen Konstellationen das letzte Komma übrig.
Das müsste man in einem zweiten Schritt noch weglöschen.

Hier die Erklärung für den regulären Ausdruck:
image

Es wird nach einem beliebigen Wort gesucht
welches vor einem Leerschlag und einer öffnenden Klammer steht,
gefolgt von einer Zahl zwischen 1 und 50
gefolgt von einer schliessenden Klammer
und möglicherweise gefolgt von einen Komma und einem Leerschlag.

Whoa Vielen Dank, das ist es! Top!
Vielen Dank auch für die Erklärung, das macht es sehr verständlich!

Kurze Frage noch für Verständnis: Um die Einträge zu trennen nutze ich das Semikolon. Ist es egal, ob da ein Leerzeichen ist oder nicht?
Momentan hab ich es so: "Rock; Pop; Metal"
Könnte aber auch "Rock;Pop;Metal" sein? Und wenn ja, wäre das aus irgendeinem Grund schlechter/besser?

Ok, ich muss leider doch noch mal was Fragen.

Einige Einträge enthalten Bindestriche, einige auch zwei oder drei Wörter. Ich hatte nicht erwartet, dass die zum Problem werden könnte, aber in dem Beispiel ergibt es sich nun so:

Original:
Substance abuse (80), Escapism (75), Identity crisis (70), Psychological distress (50), Self-realization (50)
Nach Ausführen der Aktion:
Substance Abuse; Escapism; Identity Crisis; Psychological Self-

Ziel wäre:
Substance Abuse; Escapism; Identity Crisis

Ich habe gerade versuch schlau zu werden wie das alles funktioniert, kam auch schnell so weit, dass der part '\w+ \ was mit den Wörtern zu tun hab und damit ein wenig experimentiert (w, w++, w+w+ ect) und nochmal das Forum durchsucht, bin aber zu keiner Lösung gekommen :confused:

Leider funktionieren reguläre Ausdrücke immer nur für eine ganz bestimmte, festgelegte Vorgabe.

Wenn nun plötzlich mehrere Wörter vor den Zahlen stehen (was in Deinem Beispiel nicht vorkam), dann funktioniert \w+ nicht mehr.
Du könntest als \w-Alternative aber [a-zA-Z0-9_] verwenden. Deshalb ist der zusätzliche Bindestrich z.B. so abzufangen:
[a-zA-Z0-9_-]+

Sollen dann auch noch mehrere Wörter vor der eigentlich zu prüfenden Zahl berücksichtigt werden, dann hat das mit der ursprünglichen Frage nicht mehr viel zu tun. Bitte sei beim nächsten Mal unbedingt genauer. Der Aufwand solche komplexe reguläre Ausdrücke zu erstellen und nur ansatzweise zu testen geht jeweils schnell in die Stunden...

Du kannst es aber damit probieren:
$regexp(%MOOD%,'[a-zA-Z 0-9_-]+ \((?:[1-9]|[1234][0-9]|50)\)(?:, )?',)

Du müsstest es mit Deinen Beispielen genau prüfen, ob der \w-Ersatz und der zusätzliche Leerschlag und der Bindestrich wirklich keine Nebenwirkungen haben.

Das sind alles keine gültigen regulären Ausdrücke.
\w sucht nach einem Wort (wie Du oben siehst im wesentlichen aus a-zA-Z und 0-9, also Buchstaben und Ziffern)
\w+ sucht nach einem Wort und einem Leerschlag die mindestens 1 mal vorkommen müssen
der zweite \ in \w+ \ gehört zur nachfolgenden öffnenden Klammer ( , weil Sonderzeichen wie Klammern speziell dargestellt werden müssen: \(

Ich empfehle Dir ein Tutorial wie dieses hier zu lesen:
https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/

So funktioniert das wunderbar ! Vielen vielen Dank!