Seite 1 von 1

Simple Search mit special Character

Verfasst: Sonntag 12. Februar 2017, 12:23
von Mardor
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.

Code: Alles auswählen

import re

xml = """<current>
        <city id="2875377" name="Mannheim">
                <coord lon="9.07" lat="47.82"></coord>
                <country>DE</country>
                <sun rise="2017-02-11T06:34:56" set="2017-02-11T16:41:38"></sun>
        </city>
        <temperature value="-0.53" min="-2" max="1" unit="metric"></temperature>
        <humidity value="88" unit="%"></humidity>
        <pressure value="1020" unit="hPa"></pressure>
        <wind>
                <speed value="2.1" name="Light breeze"></speed>
                <gusts></gusts>
                <direction value="50" code="NE" name="NorthEast"></direction>
        </wind>
        <clouds value="90" name="overcast clouds"></clouds>
        <visibility value="7000"></visibility>
        <precipitation mode="no"></precipitation>
        <weather number="741" value="fog" icon="50n"></weather>
        <lastupdate value="2017-02-11T18:50:00"></lastupdate>
</current>"""

temperature_output = re.compile(r'temperature value=\"(\d\.\d\d)')
mo = temperature_output.search(xml)
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

Re: Simple Search mit special Character

Verfasst: Sonntag 12. Februar 2017, 13:12
von BlackJack
@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:

Code: Alles auswählen

In [8]: from xml.etree import ElementTree as etree

In [9]: root = etree.fromstring(source)

In [10]: root
Out[10]: <Element 'current' at 0x905020c>

In [11]: root.find('temperature')
Out[11]: <Element 'temperature' at 0x91902cc>

In [12]: root.find('temperature').get('value')
Out[12]: '-0.53'

Re: Simple Search mit special Character

Verfasst: Sonntag 12. Februar 2017, 13:27
von Cronut
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)'