Simple Search mit special Character

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Mardor
User
Beiträge: 18
Registriert: Montag 9. Februar 2015, 19:07

Simple Search mit special Character

Beitragvon Mardor » Sonntag 12. Februar 2017, 12:23

Hallo,

irgendwie hänge ich seit mehreren Stunden bei einem Problem. Ich finde hier einfach auch über eine Internetsuche keine Lösung obwohl es bestimmt total simple ist.

  1. import re
  2.  
  3. xml = """<current>
  4.        <city id="2875377" name="Mannheim">
  5.                <coord lon="9.07" lat="47.82"></coord>
  6.                <country>DE</country>
  7.                <sun rise="2017-02-11T06:34:56" set="2017-02-11T16:41:38"></sun>
  8.        </city>
  9.        <temperature value="-0.53" min="-2" max="1" unit="metric"></temperature>
  10.        <humidity value="88" unit="%"></humidity>
  11.        <pressure value="1020" unit="hPa"></pressure>
  12.        <wind>
  13.                <speed value="2.1" name="Light breeze"></speed>
  14.                <gusts></gusts>
  15.                <direction value="50" code="NE" name="NorthEast"></direction>
  16.        </wind>
  17.        <clouds value="90" name="overcast clouds"></clouds>
  18.        <visibility value="7000"></visibility>
  19.        <precipitation mode="no"></precipitation>
  20.        <weather number="741" value="fog" icon="50n"></weather>
  21.        <lastupdate value="2017-02-11T18:50:00"></lastupdate>
  22. </current>"""
  23.  
  24. temperature_output = re.compile(r'temperature value=\"(\d\.\d\d)')
  25. mo = temperature_output.search(xml)
  26. print (mo.group(1))


Ganz simple möchte ich mir die Temperatur und Luftfeuchtigkeit als Wert ausgeben lassen. Mein Problem ist, dass ich es nicht schaffe das Anführungszeichen (") in der re.compile Zeile zu excluden. Natürlich kann ich es durch ein .* ersetzen, aber das wäre IMHO nicht Sinn der Sache. Weiterhin erhalte ich den Wert immer als Pluswert, d.h. -0,53 wird mit immer als 0,53 angezeigt.

Hätte jemand eine Idee ?

LG
Zuletzt geändert von Anonymous am Sonntag 12. Februar 2017, 13:09, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Re: Simple Search mit special Character

Beitragvon BlackJack » Sonntag 12. Februar 2017, 13:12

@Mardor: Meine Idee wäre zum verarbeiten von XML keine regulären Ausdrück zu verwenden, denn man kann XML nicht wirklich mit regulären Ausdrücken verarbeiten. Dafür gibt es XML-Parser wie die `ElementTree`-API in der Standardbibliothek oder vom externen Package `lxml.etree`.

Edit:
  1. In [8]: from xml.etree import ElementTree as etree
  2.  
  3. In [9]: root = etree.fromstring(source)
  4.  
  5. In [10]: root
  6. Out[10]: <Element 'current' at 0x905020c>
  7.  
  8. In [11]: root.find('temperature')
  9. Out[11]: <Element 'temperature' at 0x91902cc>
  10.  
  11. In [12]: root.find('temperature').get('value')
  12. Out[12]: '-0.53'
Benutzeravatar
Cronut
User
Beiträge: 33
Registriert: Sonntag 5. Februar 2017, 09:50
Wohnort: HRO, GER

Re: Simple Search mit special Character

Beitragvon Cronut » Sonntag 12. Februar 2017, 13:27

Finde den Weg über den XML-Baum auch schöner.

Ansonsten, wenn es mit Regex sein muss. Bei mir funktioniert dein Beispiel, wenn ich noch den optionalen Minuswert angebe:

Code: Alles auswählen

r'temperature value=\"([-]?\d\.\d\d)'
“Clean code always looks like it was written by someone who cares.” (Michael Feathers)
Check out: https://awesome-python.com/

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]