Jump to content
  • 0
Melde dich an, um diesem Inhalt zu folgen  

Regular Expressions

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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

Melde dich an, um diesem Inhalt zu folgen  

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung