Regex mit zunehmender Folge von Zahlen Python

9

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).

    
sfortney 16.02.2018, 22:00
quelle

3 Antworten

2

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.

>

Ursprüngliche Methode

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.

Siehe Code im Einsatz hier

%Vor%

Ausgaben: ['1.3 Hello how are you ', '1.4 I am fine, thanks 1.2 Hi There ', '1.5 Great!']

Bearbeiten

Sequenzielle Methode

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.

Siehe Code im Einsatz hier

%Vor%     
ctwheels 16.02.2018, 22:32
quelle
3

Dies mit einem Regex only zu tun, erscheint zu komplex. Was ist mit dieser Verarbeitung:

%Vor%

Dies funktioniert auch, wenn die Zahlen 2 Dezimalstellen oder mehr oder keine haben.

    
trincot 16.02.2018 22:40
quelle
2

Sie können die Zeichenfolge auch so ändern, dass eine Markierung neben der Ziffer platziert wird, wenn sie Teil der ansteigenden Sequenz ist. Dann können Sie den Marker teilen:

%Vor%

Ausgabe:

%Vor%     
Ajax1234 16.02.2018 23:18
quelle

Tags und Links