Seite 1 von 1

stimmt was nicht mit meiner regular expression?

Verfasst: Sonntag 6. Mai 2007, 23:32
von jo_hb
Hallo,
ich komm nicht weiter - ich lese .txt-files zeilenweise und brauche eine RE, die für diese vier fälle passt:

6.6
230
€18

Der vierte Fall ist ein einzelnes Space.

diese Zahlen / Werte & das Space stehen jeweils am Anfang der Zeile, direkt danach kommt ein newline; Ich habe nun die folgende RE gebastelt:

re.compile('(^\d+\.\d*\n|^.\d+\n|^ \n)')

...Und wie es aussieht treffe ich damit 6.6, 230 und das einzelne Space, aber ich krieg es nicht hin das auch die Zeile mit dem € trifft.

Hoffe ihr habt da ne Idee? Mach ich irgendeinen dämlichen Fehler?

Gruss,
Jo

Verfasst: Montag 7. Mai 2007, 00:39
von jo_hb
Aha, hab's doch geschafft:

re.compile('^\W*(\d+\.*\d*|\d+| )\n')

funktioniert. Lag wohl daran dass das Euro-zeichen aus drei ASCIIs besteht...

Gruss,
jo

Verfasst: Montag 7. Mai 2007, 09:53
von BlackJack
Das Eurozeichen gibt's in ASCII nicht. Du meinst 3 Bytes, daraus besteht es zum Beispiel wenn der Text UTF-8 kodiert ist. Der Ausdruck passt jetzt auch auf alle Zeichenketten bei denen beliebige "nicht-Wort"-Zeichen von Ziffern gefolgt werden. Es wäre wohl sauberer direkt auf das Euro-Zeichen zu testen. Dazu kann man es entweder UTF-8 kodiert in den Ausdruck schreiben, dann muss es im Text aber auch immer so kodiert sein, oder man arbeitet mit Unicode-Zeichenketten, statt mit Bytes.

Bei Deinem Ausdruck können an einer Stelle auch beliebig viele '.' in der Zahl vorkommen, also '42.......23' würde auch erkannt werden.

Alternativ formuliert, aber immer noch mit dem '€'-Problem:

Code: Alles auswählen

import re

def main():
    test = ('6.6\n'
            '230\n'
            '\xe2\x82\xac18\n'  # UTF-8 coded EUR sign in front.
            ' \n'
            ' 42\n'
            '#+~23\n')
    regexp = re.compile(r'^\W*(\d+(?:\.\d*)?| )$', re.MULTILINE)
    print regexp.findall(test)
Ausgabe: ['6.6', '230', '18', '42', '23']

Verfasst: Montag 7. Mai 2007, 14:21
von cyp++
gibt ein nettes Tool.. RegEx Coach.. google das mal und lade es dir runter!

Verfasst: Montag 7. Mai 2007, 20:25
von jo_hb
Hallo,
Danke für die Tips, Regexcoach ist ja schon echt ne hilfe. :)
Blackjack, das mit dem Euro werd ich mal einbauen, ansonsten ist es aber für meinen Fall gar nicht so schlimm dass die regex nicht soo exakt ist, weil meine textfiles immer sehr genau dasselbe format haben...

Gruss,
Jo