Einzelnen Beitrag anzeigen

Assarbad
(Gast)

n/a Beiträge
 
#23

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 08:32
Zitat von pajofego:
31.01.2005 17:45 4211.86 4258.41 4211.86 4254.85 0
28.01.2005 4225.36 4235.34 4188.21 4201.81 0

Falls die Uhrzeit auftaucht (Zeile 1) liest er für die erste Gruppe den Wert 45 von 17:45 raus anstatt 4211.86. Bei der zweiten Zeile klappt es.

Code:
(?<date>(\d{2}\.){2}\d{4})[\t\s]+.*?(?<number>[0-9\.]+?)[\s\t]
Ich hab auch schon die anderen Vorschläge ausprobiert, entweder er matcht es nicht oder wirft eine Exception raus! Ich habe beim ersten Vorschlag eine "Oder" Verknüpfung gelesen aber irgendwie checke ich die nicht! Könnt ihr mir noch mal bei dieser Sache helfen?
Hi pajofego,

das ".*" ist überflüssig im obigen Ausdruck

Statt:
Code:
(?<date>(\d{2}\.){2}\d{4})[\t\s]+.*?(?<number>[0-9\.]+?)[\s\t]
so:
Code:
(?<date>(\d{2}\.){2}\d{4})[\t\s]+?(?<number>[0-9\.]+?)[\s\t]
Wenn wir uns das dann anschauen, gibt es dort noch keine Regex für den Teil mit der Uhrzeit. Ich meine, man sollte Uhrzeit und Datum zusammen matchen, weil du ansonsten ja die anderen Indeces verschiebst - aber vielleicht ist das bei named groups kein Problem.

Jedenfalls funktioniert das ODER so:

Geklammerter Ausdruck um foo und bla zu matchen
Code:
(foo|bla)
Aber bei dir könnte auch folgendes funktionieren (irgendwas mit deiner Klammerung stimmt aber nicht):
Code:
(?<date>(\d{2}\.){2}\d{4}(?:[\t\s]+\d{2}:\d{2}){0,1})[\t\s]+?(?<number>[0-9\.]+?)[\s\t]
Dieser Teilausdruck:
Code:
(?:[\t\s]+\d{2}:\d{2}){0,1}
soll folgendes bewirken. Er fängt zuerst den Trenner (Space, Tab) ein und dann wird geschaut, ob es zwei Ziffern mit : und wieder zwei Ziffern gibt. "{0,1}" besagt, daß dieser Ausdruck 0 oder 1mal vorkommen kann.
  Mit Zitat antworten Zitat