Einzelnen Beitrag anzeigen

hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#8

AW: RegEx-Formatierung

  Alt 11. Aug 2015, 20:30
Code:
^(@#D(?:GREGORIAN|JULIAN|HEBREW|FRENCH\s*R)@)?\s*(AB T|EST|CAL|INT)?\s*(\d*)\s*([a-zA-Z]*)?\s*(\d*)?(\s*/)?(\d*)?\s*(BC|B.C.)?\s*(.*)?$
sollte also funktionieren
Das funktioniniert schon mal hervorragend. Dankeschön dafür.
Was bei
Code:
1917BC // wird nicht korrekt geparst
nicht funktionieren soll, ist mir nicht klar. Allerdings sind die Punkte beim B.C. problematisch, die musst du im Regex escapen, weil ein Punkt erkennt jedes beliebige Zeichen als gültig und es würde auch z.B. BIC7 als gültig erkannt werden.
also (BC|B\.C\.)
So, das wird mittlerweile mittels folgendem String erkannt:
Code:
^(@#D(?:GREGORIAN|JULIAN|HEBREW|FRENCH\s*R)@)?(?:\s*)(ABT|EST|CAL|INT)?(?:\s*)(\d*)?(?:\s*)(JUN|AUG|VEND|TIS)?(?:\s*)(\d*)?(?:/)?(\d*)?(B\.C\.|BC)?$
Allerdings nach wie vor nicht die folgende Zeile:
Code:
1917/18 B.C.
Zitat:
INT 2 AUG 1917 (Mamas Geburtstag) // hier soll nur alles innerhalb der Klammer geparst werden, wobei Klammern und Inhalt ebenfalls optional sind.
Also was jetzt, willst du dass (ABT|EST|CAL|INT) gefunden wird oder nicht?
Also zur Erklärung des Datumseintrages der erkannt werden soll:

Kalendersystem (optional)
Wird keine dieser Angaben gefunden wird automatisch das Datum als Datum des gregorianischen Kalenders angenommen.
  • @#DGREGORIAN@
  • @#DJULIAN@
  • @#DHEBREW@
  • @#DFRENCH R@
Qualität (optional)
  • CAL (berechnetes Datum)
  • EST (geschätztes Datum)
Datum
  • Tag (optional)
  • Monat (optional, Monatsnamen abhängig vom Kalendersystem)
  • Jahr
    • duales Jahr (optional)
  • B.C./BC (optional, nur möglich, wenn Jahresangabe alleine ohne Tag und Monat notiert ist)
Datum als Freitext
  • INT (Tag) (Monat) Jahr (Freitext)
  • (Freitext)
Das ist also der Aufbau der Datumsnotation. Vielleicht hilft das beim Nachvollziehen.
Zitat:
Nebenbei: Was soll
@#DFRENCH R@ 02 VEND 1917
sein? Vendredi ist doch ein Wochentag und kein Monatsname?
Richtig, es ist Vendmaire (Monat des republikanischen Kalenders) gemeint
Zitat:
Noch was:
(\d*)? und (.*)?
Da ist das Fragezeichen unnötig, * bedeutet ja 0 mal oder öfter
Das hast Du natürlich völlig recht. Ich arbeite mich grade erst in die regulären Ausdrücke ein.
  Mit Zitat antworten Zitat