2016-11-04 3 views
0

Beispiel einer Zeichenkette: Alerts will be silent from 00:00 to 05:00. Der Regex muss mit einer beliebigen Sequenz mit folgendem Format übereinstimmen: nn:nn wobei n eine Ziffer ist. Kein Problem hier, [0-9]{2}:[0-9]{2} funktioniert perfekt. Ziel ist es jedoch, jede Sequenz 00:00 und 05:00 getrennt zu identifizieren. Die 00:00 und 05:00 stellen Stunden dar, der Grund, warum ich sie getrennt identifizieren muss, ist, weil die Zeichenfolge mit relevanten Stunden aktualisiert werden muss.Übereinstimmung des ersten Auftretens einer Zeichenkette

Der folgende Regex funktioniert passend zu 05:00: [0-9]{2}:[0-9]{2}$. Jedoch für die erste Sequenz 00:00 die einzige Möglichkeit, die ich es arbeiten konnte, ist \s[0-9]{1,2}:[0-9]{2}\s, die 00:00 aber mit Leerzeichen an beiden Enden übereinstimmt. Natürlich ist dies nicht das gewünschte Ergebnis, die Sequenz muss ohne Leerzeichen zusammenpassen.

+0

'Ziel ist es jedoch, jede Sequenz separat zu identifizieren. Können Sie das weiter ausführen? – vlaz

+1

Sie müssen sie nicht separat abgleichen, Sie können sie erfassen - ['\ b ([0-9] {2}: [0-9] {2}) \ b. * \ B ([0-9] {2}: [0-9] {2}) $ '] (https://regex101.com/r/ggdAA8/1). Natürlich können Sie ['\ b ([0-9] {2}: [0-9] {2}) (?! $) \ B'] verwenden (https://regex101.com/r/ggdAA8/ 2) um eine Übereinstimmung am Ende der Zeichenfolge auszuschließen. Oder mit Lookarounds - ['(? <= \ S) [0-9] {1,2}: [0-9] {2} (? = \ S)'] (https://regex101.com/r/ggdAA8/3). –

+2

Wie ich oft sehe, könnte dies leicht ohne Regex (substring) – Rogue

Antwort

1

Es scheint, dass Ihr Problem auf andere Weise gelöst werden kann, aber Sie haben nur wenige Details angegeben.

das Hauptproblem Adressierung, vor allem:

die Sequenz muss

beachten Sie, dass \s[0-9]{1,2}:[0-9]{2}\s enthält \s als Teil des raubend Muster ohne Leerzeichen angepasst werden. Um nur zu prüfen, ob die Leerräume vorhanden oder nicht vorhanden sind, sollten Sie lookarounds oder Zero-Wide Assertions verwenden.

(?<=\s)[0-9]{1,2}:[0-9]{2}(?=\s) 

Hier (?<=\s) erfordert die Anwesenheit von einem Leerzeichen vor den ersten 1 oder 2 Stellen, aber es verfügt nicht über diese Leerzeichen verbrauchen. (?=\s) positive Lookahead erfordert das Vorhandensein eines Leerzeichen nach dem Ende 1 oder 2 Ziffern und wird auch nicht verbraucht.

Mit "konsumiert" meine ich, dass der übereinstimmende Teilstring nicht Teil des zurückgegebenen Übereinstimmungswerts ist.

+1

Große Antwort, danke. – azimov

Verwandte Themen