[REGEX] Strings in einer Liste manipulieren

S

Smartass

Gast
Hi Community,

mir ist bei der Erstellung einer Liste ein schwerer Fehler unterlaufen - ich habe als Datumsformat DD-MM-YY gewählt.

Die einzelnen Zeilen dieser Liste sind folgendermaßen formatiert:

Code:
<li><span>26. 03. 17 - 23:50</span><a href="file:///C:/...">Titel des Dokuments</a></li>
<li><span>26. 03. 17 - 21:35</span><a href="file:///C:/...">Titel des Dokuments</a></li>
<li> ...

Richtig für die Weiterverarbeitung - wie sich jetzt zeigt - wäre aber das Datumsformat YY-MM-DD gewesen, nämlich:

Code:
<li><span>17. 03. 26 - 23:50</span><a href="file:///C:/...">Titel des Dokuments</a></li>
<li><span>17. 03. 26 - 21:35</span><a href="file:///C:/...">Titel des Dokuments</a></li>
<li> ...

Macht man doch für gewöhnlich per RegEx? Also zumindest wenn man es kann ... nur übersteigt diese Programmierung bedauerlicherweise meine Fähigkeiten bei weitem, weshalb ich hier um Hilfe bitte.
 
Zuletzt bearbeitet von einem Moderator: (Typo)
Ist jetzt zwar keine RegEx-Lösung, aber den Tipp möchte ich trotzdem loswerden. ;) Voraussetzung dafür ist das Vorhandensein der entsprechenden HTML Datei.
Mit z.B. Notepad++ kann man "Macros" aufnehmen, in dem dann das entsprechend benötigte Muster einmal aufgenommen wird und dann beliebig oft angewendet wird.
Hab's gerade mal mit deinem Beispiel versucht:
0.) In Notepad++ unter "Macro-> Macro aufzeichen" die Aufzeichnung starten
1.) Mit den Pfeiltasten zur "26" springen
2.) Per STRG+X ausschneiden
3.) Mit den Pfeiltasten zur 17 springen
4.) Mit STRG+V einfügen
5.) Die "17" mit SHIFT+Pfeiltasten markieren
6.) Per STRG+X ausschneiden
7.) Mit den Pfeiltasten zur 17 hinter das schließenden "span"-Tag navigieren
8.) Mit STRG+V einfügen
9.) Mit den Pfeil-Nach-unten in die nächsten Zeile springen und mit "Pos1"-Taste sicherstellen, dass man am Beginn der Zeile ist.
10.) Macro-Aufzeichnung beenden
11.) Beliebig oft STRG+SHIFT+P drücken, sodass die für jede Zeile die Änderung durchgeführt wird.

Vllt. hilft das ja mal an der einen oder andere Stelle :)
 
Hallo Defmaster, das ist absolut genial.

Suchen nach:
Code:
^(<li><span>)(..). (..). (..)(.*)

Ersetzen durch:
Code:
\1\4. \3. \2\5

Herzlichen Dank dafür -Dir und auch Domski- noch einen schönen Sonntagabend.

THX
 
Zuletzt bearbeitet von einem Moderator: (Typo)
  1. Die Leerzeichen im Datum sind vermutlich ein "Unfall" oder?
  2. Wieso sind beim Format "xx-xx-xx" eigentlich Punkte verwendet worden, wenn es doch offensichtlich Bindestriche sein müssen?
  3. Ehrlich gesagt wäre es besser gleich auf ein 4-stelliges Jahr und damit das folgende Format (Stichwort: ISO-8601) zu setzen: YYYY-MM-DD
    https://de.wikipedia.org/wiki/ISO_8601#Datum
  4. Wenn Du unter Linux zugange bist und kannst Du übrigens mit Bash und dem Befehl "sed" leicht mehrere Dateien korrigieren, sofern es sich um mehrere handelt.

Zum Such-RegEx (ohne die Leerzeichen und mit Änderung 4-stelliges Jahr und Bindestriche statt Punkt).
Sollte auch in Notepad++ funktionieren (RegEx Modus anschalten).
Find what/Suche nach:
Code:
([0][1-9]|[1-2][0-9]|3[01])\.([0][1-9]|1[0-2])\.([0][0-9]|1[0-7])
Erklärung zum RegEx...
1. Gruppe (=Klammer):
Code:
([0][1-9]|[1-2][0-9]|3[01])
Gültig sind...
01 bis 09 oder
10 bis 19 und
20 bis 29 oder
30 und 31
2. Gruppe (=Klammer):
Code:
([0][1-9]|1[0-2])
Gültig sind...
01 bis 09 oder
10, 11 und 12
3. Gruppe (=Klammer): ([0][0-9]|1[0-7])
Gültig sind...
00 bis 09 oder
10 bis 17

Replace with/Ersetze mit:
Code:
20\3-\2-\1
Erläuterung...
Packe immer eine 20 davor (für das Jahr 2000-2017) und nehme die Zahl aus der 3. RegEx Gruppe (\3 = das 2-stellige Jahr)
Bindestrich
Nehme die Zahl aus der 2. RegEx-Gruppe (\2 = 2-stelliger Monat)
Bindestrich
Nehme die Zahl aus der 1. RegEx-Gruppe (\1 = 2-stelliger Tag des Monats)
 
Hi xmarsx,

nein, kein "Unfall" - sondern durchaus so gewollt.
Die einzelnen Listeneinträge sehen in etwa so aus:

http://codepen.io/anon/pen/mWjQYz

Danke noch für die Erläuterungen, die den Thread weiter aufwerten.

--------------

Ergänzung um 19:50:

Völlig richtig, Dein Hinweis auf das korrekte Format YYYY-MM-DD - aber die Anwendung ist keine Öffentliche, deswegen habe ich darauf verzichtet.
 
Zuletzt bearbeitet von einem Moderator: (Ergänzung 19:50)
Zurück
Oben