Verhalten der Funktion $upper($1), Aktionengruppen

Hallo zuzsammen,

ich verstehe folg. Verhalten nicht:

Ersetzen mit regulären Ausdrücken
Regexp: (.+?)
Replace: $upper($1)
--> 'hallo' wird zu 'HALLO'

Ersetzen mit regulären Ausdrücken
Regexp: (.+?)( - [A-Z]{1,5}\. )(.+?)
Replace: $1$2$upper($3)
String Quartet No.12 in E Flat Major, op.127 - II. adagio, ma non troppo e molto cantabile
--> String Quartet No.12 in E Flat Major, op.127 - II. Adagio, ma non troppo e molto cantabile

Warum wird hier jedoch nur der erste Buchstabe von 'Adagio' großgeschrieben und nicht alles von $3?

  1. Früher (>10J) unter Windows konnte man glaube ich Aktionengruppen per Checkbox ein- und ausschalten, was ich super praktisch fand, warum fehlt diese Option in der Mac-Version?

  2. Vielleicht könnte man künftig implementieren, dass sich einzelne Aktionen auch in andere Gruppen verschieben oder (mit gedrückter Optionstaste) kopieren ließen? Bei Gruppen geht das Verschieben in andere Kategorien ja bereits.

  3. Ich fände es praktisch, wenn nicht immer nur die gesamte Aktionengruppe ausgeführt werden könnte, sondern auch einzelne (z.B. die aktuell markierte(n)). Gerade bei neu angelegten komplexen Aktionen wäre das hilfreich.

Danke für die Hilfe und sorry, falls ich auf dem Schlauch stehen sollte,
Kay

  1. Es liegt an dem non-greedy Operator ? in der letzten Capture-Group Deines regulären Ausdrucks. Wenn Du diesen verwendest, werden so wenig Zeichen wie möglich konsumiert.
    Richtig wäre da (.+?)( - [A-Z]{1,5}\. )(.+)

  2. In der Mac Version kannst Du dieses Verhalten einfach per Auswahl einer Kategorie umsetzen. Kategorien gibt es in der Windows Version in dieser Form nicht.

  3. Das habe ich notiert, danke für den Vorschlag.

  4. Ich glaube das wird mir dann ein bisschen zu komplex. Man dürfte zur Anwendung der gesamten Aktionengruppe dann entweder keinen oder alle Aktionen ausgewählt haben, was zu stark vom bisherigen Verhalten abweicht. Ich würde Dir einfach eine Kategorie vorschlagen, wo Du neue Aktionen in einer neuen Gruppe unterbringst. Wenn dann 3. umgesetzt ist, lassen die Aktionen sich auch leicht von der Testgruppe in die Hauptgruppe verschieben.

Danke, Florian!

Jain :wink:
Wenn ich nur die letzte capture group bei replace mit (.+?) einsetze, also nur $3, wird sie komplett angezeigt.
Nehme ich (.*) oder (.+) für $3 in meiner kompletten replace-Formel $1$2$upper($3), wird jedoch der $3-Anteil im Ergebnis überhaupt nicht mehr angezeigt.
Nun kommt's: Entferne ich das Komma in 'Adagio, ma non troppo e molto cantabile' klappt alles erwartunggemäß mit (.*) oder (.+) für $3
Ich steig da leider aus...

Und danke auch für die Annahme meines Verbesserungsvorschlags!

Das liegt denke ich daran, dass die Capture Group in diesem Fall keinen Anker hat — ein Literal das vor oder danach kommt — und deshalb eigentlich mehrmals pro jedem Zeichen matched. Du kannst das z.B. über https://regex101.com nachprüfen.

Das ist leider ein Fehler, der sich nicht leicht umgehen und auch nicht korrigieren lässt. Es liegt an dem Mix zweier Sprachen (Reguläre Ausdrücke und die interne Skriptsprache) die leider nicht kollisionsfrei komponiert werden können.

Wenn Du Dir vorstellst, wie die Sache intern aufgelöst wird, steht bei Replace dann

$upper(Adagio, ma non troppo e molto cantabile)

Nur ist es so, dass diese Funktion nur einen Parameter nimmt. Normalerweise würde man das Ganze dann in einfache Anführungszeichen geben, also

$upper('Adagio, ma non troppo e molto cantabile')

aber die Aktion maskiert diese Zeichen automatisch als zwei einfache Anführungszeichen, da sonst alle einfachen nach dem Durchlauf der Aktion entfernt werden würden. Also alles nicht so einfach...

Kurzum: ich empfehle Dir die einzelnen Fragmente in dedizierten Tag-Feldern unterzubringen und dann einfach über Konverter → Tag - Tag das gewünschte Ziel zu komponieren.


Hier im Forum gibt es übrigens ein ähnliches Phänomen: Du müsstest Formatstrings in Backticks einfassen `, z.B., `my format string` sodass Leerzeichen und andere Spezialzeichen erhalten bleiben.

Vielen Dank für deine erhellenden Erkenntnisse!