AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu regulären Ausdrücken

Ein Thema von pajofego · begonnen am 3. Feb 2005 · letzter Beitrag vom 4. Feb 2005
Antwort Antwort
Seite 3 von 3     123   
Assarbad
(Gast)

n/a Beiträge
 
#21

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 00:47
Warum benutzt du nicht [0-9\.] wie ich oben bereits beschrieb. Damit deckst du alle Floats ab ... mit ?[\s\t]+ kannst du dann die trennenden Blankspaces oder Tabulatoren einfangen.

Konkreter:

Code:
(?<number>[0-9\.]+?)[\s\t]+
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#22

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 02:04
Sorry, hab ich übersehen!

Jetzt zumindestens klappt es mit dem einlesen beliebig langer floats, dafür habe ich jetzt an anderer Stelle ein Problem:


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?

Danke,

gruss pajofego
  Mit Zitat antworten Zitat
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
tommie-lie
(Gast)

n/a Beiträge
 
#24

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 11:11
Zitat von Assarbad:
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.
Es ist kein Problem, weil man ja über den Namen drauf zugreifen kann. Ich glaube, du denkst ein wenig zu sehr um die Ecke

Zitat:
"{0,1}" besagt, daß dieser Ausdruck 0 oder 1mal vorkommen kann.
Abgekürzt mit "?"

Also ich würd's mit folgendem Ausdruck machen:
Code:
(?<date>(\d{2}\.){2}\d{4})([\s\t]+?\d{2}:\d{2})?[\s\t]+?(?<number1>[0-9\.]+)[\s\t]+?(?<number2>[0-9\.]+)[\s\t]+?(?<number3>[0-9\.]+)[\s\t]+?(?<number4>[0-9\.]+)
Der funktioniert mit der Zeichenkette "31.01.2005 17:45 421186 4.25841 4.6 4.285" mit und ohne Uhrzeit und auch mit jeder der vier Fließkommazahlen, Länge der Zahl und Ort des Trenners ist also egal. Zugegriffen werden kann über die Gruppen "date" und "number1" bis "number4".
Wenn man's "schön" haben will, nimmt man den Ausdruck:
Code:
(?<date>(?:\d{2}\.){2}\d{4})(?:[\s\t]+?\d{2}:\d{2})?[\s\t]+?(?<number1>[0-9\.]+)[\s\t]+?(?<number2>[0-9\.]+)[\s\t]+?(?<number3>[0-9\.]+)[\s\t]+?(?<number4>[0-9\.]+)
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#25

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 11:50
Zitat von tommie-lie:
Zitat:
"{0,1}" besagt, daß dieser Ausdruck 0 oder 1mal vorkommen kann.
Abgekürzt mit "?"
Na ich weiß nicht was deutlicher ausgedrückt ist

Wenn du über Abkürzungen usw. streiten willst, kann ich dir deine Regex sicherlich in mindestens einem dutzend anderer aber gleichwertiger Varianten anbieten. Das ist müßig.

Übrigens, falls du mal schaust: ich habe immer versucht die Bedeutung der jeweiligen Regexes oder Teile davon zu erklären. Ich dachte dies sei der Sinn eines Forums?! Wenn jedoch Fertiglösungen erwünscht sind bin ich in diesem Thread falsch
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#26

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 11:59
Zitat von Assarbad:
Wenn du über Abkürzungen usw. streiten willst, kann ich dir deine Regex sicherlich in mindestens einem dutzend anderer aber gleichwertiger Varianten anbieten.
Ich weiß Aber das Fragezeichen ist mir sympathischer als {0,1}, ich weiß auch nicht, warum.

Zitat von Assarbad:
Übrigens, falls du mal schaust: ich habe immer versucht die Bedeutung der jeweiligen Regexes oder Teile davon zu erklären. Ich dachte dies sei der Sinn eines Forums?! Wenn jedoch Fertiglösungen erwünscht sind bin ich in diesem Thread falsch
Naja, so sehr unterscheidet sich mein Ausdruck ja nicht von deinem und dem, was hier im Thread sonst so an Schnipseln rumfliegt, und um ehrlich zu sein, war ich diesmal einfach zu faul, den Ausdruck zu erklären. Frei nach Mike Krüger "All what needs to be documented is written in PCRE, and I don't have the time to write it once again in English"
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#27

Re: Frage zu regulären Ausdrücken

  Alt 4. Feb 2005, 13:06
So danke erst einmal! Ich habe beides versucht und diese funktionieren einwandfrei!


Ich bin erst einmal glücklich, dass es funktioniert! Dank der Erklärungen, weiss ich zumindestens was die einzelnen Abschnitte machen, muss aber gestehen, dass die Syntax mir noch zu schaffen macht. Werde mich aber demnächst etwas ausgiebiger mit der Syntax beschäftigen!

Danke und beste Grüße

pajofego
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz