Seite 1 von 1

RegEx Problem, Dezimalzahlen

Verfasst: Sonntag 6. Januar 2008, 00:04
von DocFisher
Hallo,

ich möchte von der EZB die tagesaktuellen Wechelkurse herunterladen und in einem Währungsrechner verwenden. Allerdings schaffe ich es nicht, mit einem RegEx die korrekten Kurse zu filtern. Hier ein kurzer Auszug aus dem Quelltext:

Code: Alles auswählen

def update_kurse():
    import urllib
    import re

    site = urllib.urlopen('http://www.ecb.eu/euro.html').read()

    date_liste = re.findall('(\d\d)\ (\w*)\ (\d{4})', site)[0]
    raw_kurse = re.findall('(.*)\ \((\w*).*(\d+\.\d+)', site)

    kursliste = [('Euro', 'EUR', '1.0')]
    kursdict = {'EUR':1.0}
    for i in raw_kurse:
        kursliste.append(i)
        kursdict[i[1]] = float(i[2])
    return kursliste, kursdict, date_liste
Es geht um die raw_kurse.
Meines Erachtens müsste der Audruck (\d+\.\d+) alle Dezimalzahlen korret erfassen. Aber statt 160.86 liefert er mir nur 0.86...

Sollte \d+ nicht ein- oder mehrmaliges Vorkommen einer Ziffer beschreiben? Und ist das Vorgehen nicht "gierig"?

Es ist schon spät, vielleicht stehe ich auch nur auf dem Schlauch. Hilft mir jemand runter?

Grüße und eine gute Nacht,

Doc

Verfasst: Sonntag 6. Januar 2008, 00:15
von Hobbes Hobson

Code: Alles auswählen

def update_kurse():
    import urllib
    import re

    site = urllib.urlopen('http://www.ecb.eu/euro.html').read()

    date_liste = re.findall('(\d\d)\ (\w*)\ (\d{4})', site)[0]
    raw_kurse = re.findall('(.*)\ \((\w*).*? = (\d+\.\d+)', site)
    print raw_kurse
    kursliste = [('Euro', 'EUR', '1.0')]
    kursdict = {'EUR':1.0}
    for i in raw_kurse:
        kursliste.append(i)
        kursdict[i[1]] = float(i[2])
    return kursliste, kursdict, date_liste

Es lag am .* Das hat deine Zahl mitgenommen ;)

Verfasst: Sonntag 6. Januar 2008, 00:19
von DocFisher
Danke Hobbes,

you saved my day....
.... nope, night ;-)