RegEx Problem, Dezimalzahlen

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.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

RegEx Problem, Dezimalzahlen

Beitragvon DocFisher » Sonntag 6. Januar 2008, 00:04

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
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Beitragvon Hobbes Hobson » Sonntag 6. Januar 2008, 00:15

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 ;)
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Beitragvon DocFisher » Sonntag 6. Januar 2008, 00:19

Danke Hobbes,

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder