2016-04-27 8 views
1

Ich habe verschiedene Zeitformate, die in meinen Bericht kommen. Ich versuche das Format zu standardisieren. Die zwei, die ich bisher gesehen habe, sind wie folgt.Regex, um Zeitstempel in verschiedenen Formaten zu erfassen

3. When: 150845Z - 161045Z Jan 16 
When: 15 08:45Z - 16 10:45Z Jan 16 

Mein Ziel ist es, dass die Daten aus dem obigen Eingang in die folgenden

Start date and time 01/15/2016 08:45 
End date and time 01/16/2016 10:45 

Ich habe mehrere Capture-Gruppen zu transformieren und spaltet damit dies geschieht und sein schärft es ziemlich groß ist und ich denke, es kann vereinfacht werden.

Ich kann jeden Schritt des Codes, den ich habe, jedoch würde es wirklich diesen Beitrag aufblasen. Für das Startdatum und -uhrzeit ich nach dem

(?s)(?<=^.When:\s)[a-zA-Z0-9]+ 

Für das Enddatum und die Zeit ich die folgende

When:.+(?<=-)(\w.*) 

Ich würde wirklich zu reduzieren, wie dies so weit wie möglich. Ich habe versucht, diese Methode Regex for capturing different date formats zu implementieren, aber ich bin wirklich neu in Regex und Stücke zusammen, bis ich es zur Arbeit bekommen.

Dank

Weitere Informationen

Ich bin gerade mit Nintex Workflows verpflichtet, die Daten zu transformieren. Ich möchte die Aufnahme nach When:\s starten dann kann ich [, :] verwenden, um die verbleibenden Leerzeichen und Doppelpunkte zu entfernen. Dies würde die Daten in einem Format belassen, das ich manipulieren kann.

+0

Ihre [erste regex] (http://regexstorm.net/tester?p= (% 3fs) (% 3f% 3c 3d%%% 3a 5e.When % 5cs)% 5ba-zA-Z0-9% 5d% 2b & i = 3. + Wenn% 3a + 150845Z + - + 161045Z + Jan + 16% 0d% 0aWenn% 3a + 15 + 08% 3a45Z + - + 16 + 10% 3a45Z + Jan + 16) funktioniert nicht - was gedenken Sie zu tun? Der zweite bekommt nur den Part nach '-': Könntest du nicht einfach die Saite teilen? Solltest du nicht wirklich nach 'When:' suchen, den Teilstring danach suchen und mit '" - "' teilen, um die Teile zu bekommen, die du brauchst? –

+0

Das mache ich jetzt aber es funktioniert nicht ganz richtig. Mein Ziel ist es, die folgenden Aufnahmen zu haben. 'Monat, Startdatum, Enddatum, Jahr, Startzeit, Endzeit'. Ich bin mir nicht sicher, wie ich die Daten teilen soll. – JeremyA1

+0

Sehen Sie zuerst [diese IDEONE-Demo] (http://ideone.com/uBqU6K). Spaltet es sich? Wenn nicht, welche genaue Ausgabe möchten Sie erhalten? Dann überprüfe diese [Regex-Demo] (http://regexstorm.net/tester?p=%5e (% 3f% 3a% 5cd% 2b% 5c.% 5cs *)% 3fWenn% 3a% 5cs * (% 5cd% 7b2% 7d)% 5cs * (% 5cd% 7b2% 7d)% 3a% 3f (% 5cd% 7b2% 7dZ)% 5cs * -% 5cs * (. *) & I = 3. + Wenn% 3a + 150845Z + - + 161045Z + Jan + 16% 0d% 0aWenn% 3a + 15 + 08% 3a45Z + - + 16 + 10% 3a45Z + Jan + 16 & o = m). Ist es besser? –

Antwort

1

können Sie

^.*?When:\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*-\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*(\‌​w+)\s*(\d{1,2})$ 

verwenden und mit $1$2$3$4$5$6$7$8 ersetzen.

Siehe regex demo

Der Punkt anzupassen ist und zu erfassen, was wir brauchen, und setzen diese aufgenommenen Texte mit Hilfe von Rückreferenzierungen ($n s) im Ersetzungsmuster, und die Teile werden wir nur passen von entfernt werden die resultierende Zeichenfolge.

Hier sind einige weitere Details für Sie in der Lage sein, später das Muster anzupassen:

  • ^ - Beginn der Zeichenfolge/Zeile (keine Ahnung, ob das Werkzeug passend über die Leitungen erlaubt)
  • .*? - Spiel 0+ andere Zeichen als eine neue Zeile so wenig wie möglich bis zum ersten
  • When: - Zeichenkette When:
  • \s* - 0+ Leerzeichen Symbole
  • (\d{2})-2 digits (Gruppe 1)
  • \s* - 0+ Leersymbole
  • (\d{2})-2 digits (Gruppe 2)
  • :? - optional :
  • (\d{2}Z) - 2 Ziffern + Z (Gruppe 3)
  • \s*-\s* - 0+ whitepsaces, wörtliche - und 0+ Leerzeichen
  • (\d{2})\s*(\d{2}):?(\d{2}Z)\s* - s ee oben (Gruppe 4, 5, 6)
  • (\‌​w+) - 1+ Wort Zeichen (Buchstaben, Ziffern oder Unterstrich) (Gruppe 7)
  • \s* - 0+ whitepsaces
  • (\d{1,2})-1 oder 2 Stellen (Group 8)
  • $ - Ende der Zeichenfolge