Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.