Datumsformat für jedes Datum innerhalb eines längeren Textes ändern

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datumsformat für jedes Datum innerhalb eines längeren Textes ändern

    Hallo,

    ich weiß nicht ob das möglich ist, vielleicht stehe ich auch nur auf dem Schlauch, aber gibt es eine schnelle Möglichkeit das Format sämtlicher Datums in einem längerem Text zu ändern?

    z.B. aus "Gestern war der 11.12.2020 und demnächst, also am 24.12.2020, ist Heiligabend"
    wird dann "Gestern war der 2020.12.11 und demnächst, also am 2020.12.24, ist Heiligabend"

    Vielleicht kann mir ja wer helfen.
    LG
    Dirk
    Ehm, ja, Stichwort Regex. Aber bei der Umsetzung bin ich raus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Jo, mit Regex kann man was basteln, was Datumse identifiziert und ersetzt.
    Aber dazu muss man ausführlich recherchieren, welche Datums-Formate auftreten können. Und mit alle ist hier gemeint: alle.
    Und zusätzlich gerne noch Beispiele von ähnlich ausssehenden Text-Elementen, die aber kein Datum sein sollen, und wie man die von ersteren abgrenzt.

    Wie immer inne Programmierung: Kannst du ein Problem wasserdicht definieren ist die Lösung meist ein Kinderspiel (gelegentlich allenfalls Handwerk)

    Also beim gezeigten Text sind die Datumse ja leicht zu identifizieren: Ein Datum besteht aus: [Wortgrenze], 2Digits, Dot, 2Digits, Dot, 4Digits, [Wortgrenze]
    Die Erfahrung zeigt, dasss die Menschheit leider unglaublich kreativ ist, Datumse auch anders auszudrücken - wie gesagt: u.U. umfassende Recherche, ehe das Problem ühaupt wasserdicht definiert ist.

    Und wenn du mit Regex anfängst: Versuchs nicht ohne einen Regextester. Obwohl - inzwischen ist die Regex-Unterstützung der VisualStudio-Find-Funktion schon ein leidlicher Build-In-Regextester - leider ohne Dokumentation der Regex-Syntax.
    Nochwas: Die oben erwähnten (Regex-)Begriffe [Wortgrenze], Digit, Dot sollten schon ausreichen, um Identifikatoren der meisten denkbaren Datumse zu definieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ok....ich werde dann nach den Datums suchen und inne Matchcollection packen.
    Dann regex.split mit dem Datumspattern anwenden, dann jeden match in der collection mit string.format umwandeln und dann alles wieder joinen. So müsste es dann ja gehen.
    Dachte nur, dass es da vielleicht schon was gibt.

    Vielen Dank
    pfff...na du schaffst mich ja...das ist neu für mich. Mit Regex.Replace() spare ich mir wohl das split und join zeugs.
    Ich hab bisher nicht vom MatchEvaluator gehört, aber es fühlt sich vom Klang schonmal richtig an. Die Performance ist sicher auch besser als meine Idee.
    Danke :)

    Der Matchevaluator war genau das was ich gebraucht habe. Es funktioniert wunderbar und ist auch schön kompakt :)

    Vielen Dank nochmal!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kinobi“ ()

    wie gesagt: dein Problem ist erstmal für deine Daten einen passenden regex-pattern zu finden.
    Und zwar einen, der mit allen deine Daten korrekt umgeht.
    Dann ein Replace mit Matchevaluator hinzuhauen ist Kinkerlitz.
    Kann ich dir sogar jetzt schon schreiben, wo der Pattern noch garnet da ist:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. ...
    3. Private _rgxUnifyDate As New Regex("????")
    4. ''' <summary>tauscht alle in inputText auftretenden Datums-Literale aus durch ein einheitliches Datum-Format</summary>
    5. Private Function UnifyDateFormat(inputText As String) As String
    6. Dim eval As MatchEvaluator = Function(mt)
    7. Dim dt = Date.Parse(mt.Value)
    8. Return dt.ToShortDateString 'or whatever
    9. End Function
    10. Return _rgxUnifyDate.Replace(inputText, eval)
    11. End Function