Zum Inhalt springen
  • 0

Regular Expressions


Perceptor

Frage

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 von Bluejazzer
Link zu diesem Kommentar
Auf anderen Seiten teilen

Empfohlene Beiträge

  • 1

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/
Bearbeitet von PVoss
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...