Veröffentlicht 12. April 20196 j Hallo, Ich soll im im Rahmen meiner Ausbildung ein Analyseprogramm in Python schreiben. Ich komme hier erstmals mit Regular Expressions in Berührung. Leider habe ich bei google nichts gefunden was mir da helfen könnte. ich möchte einen Ausdruck zerlegen und den Zeitstempel aus einer Logdatei extrahieren. Der Ausdruck ist folgendermaßen aufgebaut: 2019-02-14_23:31:50:[t2-3]:[start]:cycle 113 Mit dem regex will ich nur, dass der Ausdruck "2019-02-14_23:31:50" bis zum ":[" (also zwei Zeichen) ausgeschnitten wird. Ich kann mit dem regexterm ^[^[]* nur das eine Zeichen [ eingeben, bis wo geschnitten werden soll. Daher die Frage, ob es eine Möglichkeit gibt, kombinierte (oder mehrere) Zeichen, in meinem Fall ":[" einzugeben, damit :[ als die Stelle im Ausdruck gilt, bis wohin der Ausdruck geschnitten werden soll. Danke im voraus Bearbeitet 12. April 20196 j von Bluejazzer
12. April 20196 j Da gibt es verschiedene Möglichkeiten. Das Format steht ja wahrscheinlich fest, du kannst im RegEx aber trotzdem auf Nummer sicher gehen, dass du genau diese Zeichen haben möchtest. ^(?<datetime>\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2}) ^ - Hier beginnt der String ( - das folgende ist der Beginn der Gruppe die du im Ergebnis bekommst ?<datetime> - die Gruppe heißt datetime \d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2} - 4 Ziffern, gefolgt von "-" gefolgt von 2 Ziffern, gefolgt von "-" ... \d -> das Zeichen muss eine Ziffer sein {X} -> es müssen genau X Ziffern sein ) - Ende der Gruppe datetime Diese Variante ist gut, weil sie auch funktionieren würde, wenn die gesuchten Zeichen nicht direkt am Anfang stehe. In dem Fall könntest du "^" durch ".*" ersetzen. Falls dieses Format öfter vorkommt müsstest du dir aber mal die Modifikatoren ansehen und gucken, was da noch so möglich ist. Wenn du dich eh darauf verlässt, dass die Form gleich bleibt: ^(?<beforeDefined>.*):\[/U ^ - Hier beginnt der String ( - das folgende ist der Beginn der Gruppe die du im Ergebnis bekommst ?<beforeDefined> - die Gruppe heißt beforeDefined .* - "egal welches Zeichen, egal wie oft ) - Ende der Gruppe beforeDefined : - Nach der Gruppe folgt ein : \[ - Nach : folgt ein [ /U die Modifikationen, das U ist wichtig damit die Gruppe beim ersten ":[" abschließt Ganz simpel wäre natürlich auch... Einfach die ersten 18 Zeichen zu nehmen... ^(?<datetime>.{18}) . - beliebiges Zeichen {18} - genau 18 mal Zum Testen: https://regex101.com/ Gutes Tutorial: https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/ Bearbeitet 12. April 20196 j von PVoss
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.