[erledigt] Regex - was macht HTTPMOD anders?

Begonnen von drhirn, 04 Dezember 2018, 13:23:48

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

möchte aus folgendem HTML-Code, den ich via HTTPMOD bekomme, den String "stark bewölkt" extrahieren. Habe mir dazu mit meinem spärlichen Wissen eine Regex gebastelt, die in diversen online Regex-Testern das richtige Ergebnis liefert. HTTPMOD liefert aber leider den String "West" (Windrichtung in der nächsten Zeile). Kann mir jemand sagen, warum?

Code:
<div class="stationData">
         <h3 itemprop="name">Innere Stadt</h3>
         <p class="temperature">12,8&thinsp;<abbr title="Grad Celsius">&deg;C</abbr><span class="offscreen">, stark bewölkt.</span></p>
         <p class="wind">15 <abbr title="Kilometer pro Stunde">km/h</abbr><span class="offscreen">, West.</span></p>
         <p class="precipitation">0,0 <abbr title="Millimeter pro Stunde">mm/h</abbr></p>         
      </div>
   </a>
</div>


Regexp:
Innere Stadt<\/h3>[\s\S]*offscreen\">,\s([\S\s]*)\.<\/span>[\s\S]*wind

Die Regex ist deshalb so kompliziert am Schluss, weil ich auch nicht herausgefunden habe, wie ich nur die erste gefundene Gruppe zurückgeben kann. Sonst funktioniert das über Greedy-Flag, aber wie mache ich das bei HTTPMOD/FHEM?

Danke!
Stefan

betateilchen

wäre es nicht einfacher, nur auf die span Tags zu prüfen?

<span.*>, (.*)\.<\/span>

liefert bei mir korrekte Ergebnisse.

Zitat von: drhirn am 04 Dezember 2018, 13:23:48
weil ich auch nicht herausgefunden habe, wie ich nur die erste gefundene Gruppe zurückgeben kann

in HTTPMOD vermutlich gar nicht. Die gefundenen (mehreren) Gruppen werden in readings geschrieben, deren Name mit -1 -2 usw. ergänzt wird, um die einzelnen Werte aufzunehmen. Steht auch so in der Doku:

You can also use regular expressions that have several capture groups which might be helpful when parsing tables. In this case an attribute like
reading02Regex something[ \t]+([\d\.]+)[ \t]+([\d\.]+)
could match two numbers. When you specify only one reading02Name like
reading02Name Temp
the name Temp will be used with the extension -1 and -2 thus giving a reading Temp-1 for the first number and Temp-2 for the second. You can also specify individual names for several readings that get parsed from one regular expression with several capture groups by defining attributes
reading02-1Name
reading02-2Name ...


Du kannst also auch die gefundenen Gruppen-readings nochmal nach Deinen Wünschen benennen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

drhirn

Es gibt auf der Seite die Daten mehrerer Wetterstation. Deswegen kann ich nicht nach den <span>s suchen, sondern muss mit "Innere Stadt" beginnen. Und lästigerweise sind da auch Zeilenumbrüche und ähnliches vorhanden. Deswegen nützt mir ".*" meistens auch nicht viel.

Der Hinweis auf die "-1,-2 Readings" hat mich aber zum Ziel geführt. Hatte das mal gelesen, aber damals nicht verstanden. Jetzt schon ;).

Innere Stadt<\/h3>[\s\S]*offscreen\">,\s([\S\s]*)\.<\/span>[\s\S]*, ([\s\S]*)\.<\/span>

Danke dir!