Im CFD mit Regex Teilstring auslesen (GetExtensionStatus / CurrentProfile)

LH74

Customer
Mitglied seit
20. November 2019
Beiträge
9
Hallo,

ich staune, wie viele Code-Beispiele hier im Forum zur Verfügung gestellt werden und dennoch finde ich nichts passendes für eine ganz simple Anforderung oder ich sehe einfach nur den Wald vor lauter Bäumen nicht.

Ich möchte im CFD den vom Benutzer eingegebenen eigenen Statustext auslesen. Dieser steht ja über GetExtensionStatus / CurrentProfile zur Verfügung. Nur eben nicht extrahiert, sondern nur zusammen mit vielen anderen Informationen, z. B. so:

Wfwdprofile.20: Available(Hier ist Platz für einen eigenen Statustext, der automatisch vorgelesen werden kann.) - Available - Timeout=30 BusyDetectio=:UsePhoneStatus RingMyMobile:False

Nichts einfacher als das, könnte man meinen, den Text, der dort in Klammern steht, zu extrahieren. Nur kenne ich mich weder mit C# noch Regex aus. Die typischen Stringfunktionen in VBS sind mit bekannt, aber es gibt im CFD keine StringFind Funktion, mit dem ich die Position des Klammerzeichens ermitteln und dann mit den CFD-String-Funktionen LEFT, MID, RIGHT mir das gewünschte herausschneiden kann.

Die CFD-String-Funktion REPLACE REG EXP ist ja wunderbar, und ich hätte auch die passende Regular Expression, um den Text in der Klammer zu extrahieren: \([^)]*\) Aber diese Funktion nützt hier offenbar nichts, da ich damit den gesuchten Text nur durch etwas anderes ersetzen kann. Oder ich bin zu dumm, diese Funktion richtig zu nutzen, so dass eben das, was die Regex zurück gibt, mir zur Verfügung steht.

Kann mir jemand weiterhelfen?
 
Hallo @LH74

REPLACE_REG_EXP(REPLACE_REG_EXP(GetExtensionStatus.CurrentProfile,".*\\(",""),"\\).*","")

Die CFD Funktion REPLACE_REG_EXP kennt leider kein Backtrack. Daher wird die zwei mal ineinander geschachtelt ausgeführt: einmal wird alles vor der (Achtung! letzten) Klammer inkl. Klammer gelöscht, ein andermal alles hinter der darauf folgenden Klammer inkl. der Klammer. Der Rest ist der urspr. Inhalt des (letzten) Klammernpaar.

Das Problem des letzten Treffers: der in der CFD Funktion eingebaute regex Parser ist gierig (suche mal nach regex greedy).
Ein .*? gewöhnt dem Parser wie sonst üblich diese Gier leider nicht ab. Sind mehr als eine offene oder geschlossene Klammer im Ausdruck, dann passieren komische Dinge. Da hilft also nur ein C# Code Schnipsel:
C#:
return System.Text.RegularExpressions.Regex.Match(strInput, @"^.*?\(([^)]*)").Groups[1];
wobei strInput ein Input Parameter des CFD C# Code Schnipsel ist - in deinem Fall der Rückgabewert GetExtensionStatus.CurrentProfile. Das funktioniert dann auch mit mehreren offenen Klammern. Es wird immer der Text nach der ersten sich öffnenden Klammer bis zur sich schließenden Klammer oder bis zum Ende zurückgegeben.
 
Zuletzt bearbeitet:
You've made my day!

Tausend Dank für Deine Hilfe! Funktioniert perfekt!
 
  • Like
Reaktionen: fxbastler

Statistik des Forums

Themen
44.414
Beiträge
232.716
Mitglieder
78.330
Neuestes Mitglied
uvitas