regex ... ich bin zu blöd dafür

Begonnen von Bjoernar, 23 Mai 2021, 15:27:55

Vorheriges Thema - Nächstes Thema

Bjoernar

Hallo,

ich hoffe es kann mir jemand helfen den regex Befehl entsprechend anzupassen, ich bin dafür einfach zu blöd ;-)

Ich habe folgenden String und den Fetten Bereich hätte ich gerne:

WLAN-Verbindung: gut; Browser-Ladegeschwindigkeit: gut

Damit klappt das auch soweit:
(?s)WLAN-Verbindung:.*?(\w+)
(?s)Browser-Ladegeschwindigkeit:.*?(\w+)

Jedoch steht da nicht immer gut, sondern z.B. auch da:
WLAN-Verbindung: noch o.k.; Browser-Ladegeschwindigkeit: gut

(?s)WLAN-Verbindung:.*?(\w+) beendet dann entsprechend bei dem Leerzeichen hinter "noch"

Wie kann ich das so ändern das der erste String bis zum ; geht und der zweite einfach bis zu ende?

Meine Fähigkeiten bei regex reichen dafür leider nicht aus.

Danke schon mal für die Hilfe.
Gruß
Björnar

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Benni

#2
https://regexr.com/5th42

Sorry, es ging ja nur um die fetten Anteile:

Dann so:
https://regexr.com/5th4b

sowas?

gb#

Bjoernar

Danke schon mal für die Antwort.
Kann ich leider so nicht umsetzen.

Mit "(?s)(?s)WLAN-Verbindung:.*?(\w+)" suche ich ja nach dem String "WLAN-Verbindung:" und nehme dann das Wort dahinter.


Also müsste der ".*?(\w+)" Teil irgendwie angepasst werden.


TomLee

Schreib doch einfach WLAN-Verbindung vor den Vorschlag von oben, oder kannst es damit auch nicht umsetzen ?

WLAN-Verbindung:.(.*);.*:.(.*)$

Bjoernar

das habe ich ja versucht, aber das funktioniert dann auch nicht.
Was regex angeht reicht es bei mir wohl wirklich nur zu copy and paste.

Otto123

Bennis Vorschlag passt doch auf Deinen String? Auch mit deinem Text
WLAN-Verbindung:\s(.*);.*:\s(.*)
Warum bestehts Du auf den (?s) - in welchem Kontext verwendest Du das regEx denn? (?s) ist ein mode modfier  ???
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bjoernar

Bestehe ich überhaupt nicht drauf.
Ich lese aus der Seite meines Weathermans mehrere Werte aus die nicht über CCU kommen.
Das klappt mit dem String halt solange das Wort kein Leerzeichen hat.

Wie auch immer das dann gemacht werden muss.
Wenn ich das richtig verstehe Sicht mein regex nach dem Teig und nimmt einfach das Wort was dahinter steht.

Ob das auch anders geht keine Ahnung

Auf der Seite werden halt viele Werte dargestellt.

KyleK

#8
Ich würde das so schreiben:

WLAN-Verbindung:\s(.+?);\sBrowser-Ladegeschwindigkeit:\s(.+)$


https://regex101.com/r/8rjPoi/1

\w ist ein Shorthand für [A-Za-z0-9_], also mehr oder weniger alle "Wörter". Da is aber kein Punkt dabei, und keine Leerzeichen.
\w+ macht daher meiner Meinung nach nicht viel Sinn.

*EDIT:* Das geht auch, und ist laut regex101.com sogar effizienter:

(?s)WLAN-Verbindung:.*?([\w\s.]+)
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

betateilchen

Zitat von: Bjoernar am 23 Mai 2021, 17:29:26
Kann ich leider so nicht umsetzen.

Meine oben vorgeschlagene regex

:.(.*);.*:.(.*)$

wurde sowohl mit

WLAN-Verbindung: gut; Browser-Ladegeschwindigkeit: gut

als auch mit

WLAN-Verbindung: noch o.k.; Browser-Ladegeschwindigkeit: gut

getestet und lieferte in beiden Fällen das gewünschte Ergebnis in den Gruppen 1 und 2
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bjoernar

Danke für die Hilfe.

das Klappt entsprechend:

(?s)WLAN-Verbindung: .*?([\w\s.]+)