Seite 1 von 1
REGEX verschiedene Werte in einem String extrahieren
Verfasst: 12. Jan 2023 09:49
von lenschith
Hallo zusammen,
ich habe in einem String unterschiedliche Werte die ich gerne mit REGEX in unterschiedliche Items extrahieren möchte. Leider scheitere ich kläglich.
Evtl. hat ja jemand von Euch einen Tipp wie das REGEX aussehen muss.
Hier möchte einmal alles hinter T0: in einem Item sowie alles hinter B:
B: habe ich so gelöst:
Bin mir nicht sicher ob das so passt und schön ist aber zumindest bekomme ich den Wert raus.
Aber wie kann ich das hinter T0: separieren, ich hab schon einiges versucht aber ich bekomme das nicht hin.
Gruß Lenschi
Re: REGEX verschiedene Werte in einem String extrahieren
Verfasst: 12. Jan 2023 10:39
von udo1toni
Der REGEX Ausdruck für den Wert 26/0: .*T0:(.*) B:.*
Der REGEX Ausdruck für den Wert 17/0: .*B:(.*) ok.*
Der Punkt steht für ein beliebiges Zeichen, der Stern für eine beliebige Anzahl des vorhergehenden Zeichens, also eine beliebig lange Zeichenkette beliebigen Inhalts. T0: ist die Zeichenfolge, die matchen muss. In Klammern steht der Ausdruck, der zurückgegeben wird, in diesem Fall ausl wieder eine belieibg lange Zeichenfolge. Nach dieser Zeichenfolge muss ein Leerzeichen, gefolgt von B: und einer weiteren beliebig langen Zeichenkette beliebigen Inhalts matchen.
Prinzipiell könntest Du auch mit \d für eine Zahl arbeiten, aber das macht den Ausdruck nur komplizierter und es sollte ja auch so eindeutig matchen. Wichtig ist aber, dass der erwünschte Rückgabewert in Klammern steht, nicht ein Teil des Ausdrucks, der nur Beiwerk ist.
Re: REGEX verschiedene Werte in einem String extrahieren
Verfasst: 12. Jan 2023 10:51
von lenschith
Danke Udo,
es kann so einfach sein, wenn man weiß wie.
Gruß Lenschi
Re: REGEX verschiedene Werte in einem String extrahieren
Verfasst: 12. Jan 2023 11:09
von tim.l
Hallo ihr beiden,
habe noch einen Gegenvorschlag zu dem von Udo.
Falls die Werte unabhängig sind, würde ich eher das Leerzeichen als Trennzeichen als Indikator nehmen.
D.h. so etwas wie .*B:([^ ]*).* und .*T0:([^ ]*).* (Achtung. Jeweils ein Leerzeichen hinter dem Dach)
Dadurch brauchen die Werte paare nicht direkt hintereinanderstehen (bei Udo muss ja das "B" hinter dem "T0" Wert stehen und auch ein "ok" hinter dem "B" wert stehen). Gerade bei dem "ok" weiß ich nicht, ob das IMMER "ok" ist oder ob es noch andere States gibt. Deshalb noch der Vorschlag mit dem "Kein Leerzeichen" anstatt dem Anfang des Werts dahinter zu prüfen.
Beste Grüße,
Tim
Re: REGEX verschiedene Werte in einem String extrahieren
Verfasst: 13. Jan 2023 07:36
von lenschith
Danke für die Tipps. Leider kann ich das so nicht in Openhab anwenden habe ich festgestellt. Aber nun stehe ich vor dem nächsten Problem.
Eigentlich würde ich nur die Zahl von dem / benötigen. Wie kann ich denn den / maskieren?
Würde quasi als Ergebnis bei T0: nur die 26 benötigen.
Re: REGEX verschiedene Werte in einem String extrahieren
Verfasst: 13. Jan 2023 10:29
von udo1toni
Den Slash musst Du wohl escapen, also ein \ voranstellen, vielleicht funktioniert sowas:
.*T0:(\d*)\/\d* B:.* bzw.
.*B:(\d*)\/\d* ok.*
Das Problem mit openHAB Regex ist, dass es sich nicht zu 100 % an die Regeln hält.

Beispielsweise müsste es immer auf den kürzestmöglichen Term matchen, tut es aber nicht (deshalb auch " B:" als Erkennung)