RegEx für Label / data-part ?

Begonnen von DocCyber, 26 März 2020, 19:00:50

Vorheriges Thema - Nächstes Thema

DocCyber

EDIT 27.3.2020
Ich bin vielleicht nicht richtig verstanden worden. Deshalb formuliere ich meine Fragestellung anders. (s. unten)


Hallo zusammen

Es sei z.B. folgender Ausdruck:  EinWert:125
Wie kann ich   EinWert    bzw    125    (also ohne den Doppelpunkt!) in einem Label-Widget mittels data-part extrahieren?

Der Regex
[^:]*$
gibt mir im Online-Tester das richtige Ergebnis (125) aus, funktioniert aber nicht im folgenden Code. (Es wird nichts ausgegeben.)

<div class="label"
  data-device="dummy"
  data-part="[^:]*$">
</div>


Wie muss das richtig aussehen, damit es funktioniert?
Und wie müsste der Regex aussehen, wenn ich   EinWert   haben möchte?

Es wäre toll, wenn jemand helfen könnte. Vielen Dank vorab.

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox


DocCyber

Dieser und ähnliche Links helfen mir bei meiner Fragestellung leider nicht weiter.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

#3
Hier also etwas anders formuliert.
Es geht nicht um den RegEx an sich, sondern um data-part.


TEST STRING:    EinWert:125
/[^:]*/  findet EinWert
/[^:]*$/ findet 125

so weit, so gut.
Das Label-Widget soll laut Wiki mit data-part und einem RegEx Teile eines Strings auslesen können.
Leider funktioniert das nicht.
<div class="label"
  data-device="dummy"
  data-part="[^:]*$">
</div>


So auch nicht:
<div class="label"
  data-device="dummy"
  data-part="/[^:]*$/">
</div>


Da der RegEx prinzipiell okay ist, muss es am Ausdrucksformat für data-part liegen.
Weiß jemand, was ich falsch mache? Oder funktioniert ein RegEx im Gegensatz zum Wiki hier doch nicht?
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

yersinia

mal geraten, du hast zwar einen Match aber keine Capturing group, funktioniert dies ggf:
<div class="label"
  data-get="dummy"
  data-part="/([^:]*)$/">
</div>
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

yersinia

Auch nicht ohne die /
<div class="label"
  data-get="dummy"
  data-part="([^:]*)$">
</div>


Möglicherweise kann data-part das auch nicht und evtl hilft dir data-substitution weiter.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

Zitat von: yersinia am 27 März 2020, 13:34:21
Auch nicht ohne die /
<div class="label"
  data-get="dummy"
  data-part="([^:]*)$">
</div>

Hab ich noch nicht ausprobieren können.

Zitat
Möglicherweise kann data-part das auch nicht und evtl hilft dir data-substitution weiter.

Hiernach schon...
https://wiki.fhem.de/wiki/FTUI_Widget_Label
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

MKeY

#8
<div data-type="label" data-device="dummy" data-part=".*\:([0-9]*)*$"></div>
funktioniert in meiner Testumgebung (Frag aber nicht warum!)
Bitte auf das data-device="dummy" achten

hierher geklaut: https://stackoverflow.com/questions/32627864/regex-to-match-a-word-after-the-last-dot-in-a-string
Wer Fehler findet, darf sie behalten!
RPi's, D1Mini
Homematic, Hue, Sonoff, Alexa, Xiaomi, ConBee
Prusa MK2.5, Prusa MK3S (MMU2S vorhanden, aber nervtötend)
Lowrider 2CNC

DocCyber

#9
Ich war erneut nicht präzise genug - sorry.

Unabhängig vom Inhalt möchte ich den Teilstring vor bzw hinter dem Doppelpunkt haben, aber ohne den Doppelpunkt selbst. (vgl. Screenshots)
Du filterst in deinem Beispiel nach Zahlen.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

Zitat von: MKeY am 27 März 2020, 14:32:09
Bitte auf das data-device="dummy" achten
Du hast selbstverständlich Recht. Ich hab's in echt richtig, nur im Beispiel war es falsch geschrieben.  :o
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

Prof. Dr. Peter Henning

 ::)
Noch einmal: Reguläre Ausdrücke muss man erst verstehen, und dann testen. Insofern auch noch einmal: https://regex101.com/ gibt gute Fehlerhinweise.

pah

MKeY

wenn du eh ggf beide Werte möchtest, warum machst du im Device kein userreading mit Perl?

Teil1:.* {my @split = split ':', ReadingsVal($name, "state", ""); my $ret = $split[0]; return $ret;},
Teil2:.* {my @split = split ':', ReadingsVal($name, "state", ""); my $ret = $split[1]; return $ret;}
Wer Fehler findet, darf sie behalten!
RPi's, D1Mini
Homematic, Hue, Sonoff, Alexa, Xiaomi, ConBee
Prusa MK2.5, Prusa MK3S (MMU2S vorhanden, aber nervtötend)
Lowrider 2CNC

DocCyber

Ja, es gibt auch andere Lösungen,  natürlich, und ich verwende eine davon.
Aber es geht mir darum, es mit Regex zu machen,  weil es die eleganteste Lösung ist.

Es kann doch nicht sein, dass man einen definitiv richtigen regulären Ausdruck nicht in data-part eingebaut bekommt.

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox

DocCyber

Zitat von: Prof. Dr. Peter Henning am 27 März 2020, 18:07:32
Nochmal https://regex101.com/ gibt gute Fehlerhinweise.

Danke für die Antwort.
Aber ebenfalls nochmal: ich kenne die Seite. Sie ist gut,  aber sie hilft mir bei dieser Fragestellung nicht, denn ich habe ja bereits die passenden Regex.
Oder habe ich etwas übersehen?
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-4B mit HM-CFG-LAN und viele weitere HM Komponenten, diverse Shellys, Tuya-Geräte, SMA und Solis Wechselrichter, Elgris EnergyManager, go-e Wallbox