Angenommen, ich habe eine Zeichenfolge:
%Vor%Das möchte ich als:
%Vor%Grundsätzlich wird nur auf steigende Ziffern aufgeteilt, wobei die Differenz 0,1 ist (d.h. 1,2 bis 1,3).
Gibt es eine Möglichkeit, dies mit Regex zu teilen, aber nur steigende sequentielle Zahlen zu erfassen? Ich habe Code in Python geschrieben, um nacheinander mit einer benutzerdefinierten re.compile () -Operation zu durchlaufen, und es ist in Ordnung, aber extrem unhandlich.
So etwas (wobei parts1_temp eine gegebene Liste der x.x.-Nummern in der Zeichenfolge ist):
%Vor%Aber der Mensch ist es hässlich. Gibt es eine Möglichkeit, dies direkt in Regex zu tun? Ich stelle mir vor, dass dies Feature ist, das jemand irgendwann mit Regex haben wollte, aber ich kann keine Ideen finden, wie man das anpackt (und vielleicht ist es mit reinem Regex nicht möglich).
Diese Methode verwendet finditer
, um alle Orte von \d+\.\d+
zu finden, und testet dann, ob die Übereinstimmung numerisch größer als die vorherige war. Wenn der Test wahr ist, hängt er den Index an das Array indices
an.
In der letzten Zeile wird das Listenverständnis aus dieser Antwort verwendet, um die Zeichenfolge auf die angegebenen Indizes aufzuteilen.
> Diese Methode stellt sicher, dass die vorherige Übereinstimmung kleiner als die aktuelle ist. Dies funktioniert nicht sequentiell, stattdessen funktioniert es basierend auf der Anzahl. Unter der Annahme, dass ein String die Zahlen 1.1, 1.2, 1.4
hat, wird er bei jedem Auftreten geteilt, da jede Zahl größer ist als die letzte.
Ausgaben: ['1.3 Hello how are you ', '1.4 I am fine, thanks 1.2 Hi There ', '1.5 Great!']
Diese Methode ist der Originalvorlage sehr ähnlich, aber im Fall von 1.1, 1.2, 1.4
würde sie nicht auf 1.4
aufgeteilt, da sie sequentiell nicht folgt, wenn das sequentielle Trennzeichen .1
verwendet wird.
Die folgende Methode unterscheidet sich nur in der if
-Anweisung, daher ist diese Logik ziemlich anpassbar an Ihre Bedürfnisse.
Tags und Links python string regex sequential