REGEX verschiedene Werte in einem String extrahieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

REGEX verschiedene Werte in einem String extrahieren

Beitrag 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.

Code: Alles auswählen


CMD M105 Received. T0:26/0 B:17/0 ok

Hier möchte einmal alles hinter T0: in einem Item sowie alles hinter B:
B: habe ich so gelöst:

Code: Alles auswählen

(?<=[B][:]).*\d*\/\d*\S
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
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: REGEX verschiedene Werte in einem String extrahieren

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: REGEX verschiedene Werte in einem String extrahieren

Beitrag von lenschith »

Danke Udo,
es kann so einfach sein, wenn man weiß wie. ;)

Gruß Lenschi
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

tim.l
Beiträge: 71
Registriert: 24. Jun 2022 08:16
Answers: 2
Wohnort: Bielefeld
Kontaktdaten:

Re: REGEX verschiedene Werte in einem String extrahieren

Beitrag 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
Meine openHAB Erfahrungen bei mir im Blog: https://360friends.de/tag/openhab/ ;)

Benutzeravatar
lenschith
Beiträge: 313
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: REGEX verschiedene Werte in einem String extrahieren

Beitrag 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?

Code: Alles auswählen

CMD M105 Received. T0:26/0 B:17/0 ok
Würde quasi als Ergebnis bei T0: nur die 26 benötigen.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: REGEX verschiedene Werte in einem String extrahieren

Beitrag 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)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten