Welcher RegEx-String findet die letzte (am weitesten rechts stehende) Zifferngruppe in einem String?

7

Suche nach einer Regex-Zeichenfolge, die es mir ermöglicht, die am weitesten rechts stehende (falls vorhanden) Gruppe von Ziffern zu finden, die in eine Zeichenfolge eingebettet sind. Wir kümmern uns nur um zusammenhängende Ziffern. Zeichen, Kommas, Dezimalzahlen usw. sind uns egal. Diese sollten, wenn sie gefunden werden, einfach wie ein Buchstabe als Ziffern behandelt werden.

Dies ist für Ersetzungs- / Inkrementierungszwecke, also müssen wir auch alles vor und nach der erkannten Zahl aufnehmen, so dass wir die Zeichenkette rekonstruieren können, nachdem wir den Wert inkrementiert haben, so dass wir eine tokenisierte Regex brauchen.

Hier sind Beispiele, wonach wir suchen:

  • "abc123def456ghi" sollte die '456 'identifizieren
  • "abc123def456ghi789jkl" sollte die '789 '
  • identifizieren
  • "abc123def" sollte das '123 '
  • identifizieren
  • "123ghi" sollte die '123 '
  • identifizieren
  • "abc123,456ghi" sollte die '456 'identifizieren
  • "abc-654def" sollte das "654" identifizieren
  • "abcdef" sollte keine Übereinstimmung zurückgeben

Als Beispiel für das, was wir wollen, wäre es so, als würde man mit dem Namen 'Item 4-1a' beginnen und die '1' mit allem herausziehen, bevor sie das Präfix und alles nach dem Suffix ist. Dann können wir die Werte "Item 4-2a", "Item 4-3a" und "Item 4-4a" in einer Code-Schleife erzeugen.

Wenn ich jetzt nach dem ersten Satz suchen würde, wäre das einfach. Ich würde nur den ersten zusammenhängenden Block von 0 oder mehr Nicht-Ziffern für das Präfix finden, dann den Block von 1 oder mehr zusammenhängenden Ziffern für die Nummer, dann wäre alles andere bis zum Ende das Suffix.

Das Problem, das ich habe, ist, wie man das Präfix so definiert, dass es alle (wenn überhaupt) Nummern außer dem letzten Satz enthält. Alles, was ich für das Präfix versuche, schluckt dieses letzte Set, auch wenn ich versucht habe, es bis zum Ende zu verankern, indem ich einfach das obige umkehre.

    
MarqueIV 05.01.2012, 12:40
quelle

5 Antworten

13

Wie wäre es mit:

%Vor%

dann erhöhen Sie die zweite Gruppe und concat alle 3.

Erläuterung:

%Vor%

Die erste Erfassungsgruppe passt alle Zeichen bis zur ersten Ziffer der letzten Zifferngruppe vor dem Ende der Zeichenfolge an.

oder wenn Sie die benannte Gruppe verwenden können

%Vor%     
Toto 05.01.2012, 13:36
quelle
5

Probieren Sie die nächste Regex:

%Vor%

Erläuterung:

%Vor%

BEARBEITEN (OFFTOPIC der Frage): : Diese Antwort ist inkorrekt, aber diese Frage wurde bereits in anderen Posts beantwortet. Um zu vermeiden, diese zu löschen, benutze ich zum Beispiel denselben Regex in Perl könnte so verwendet werden, um das gleiche Ergebnis zu erhalten wie in C# (letzte Ziffer erhöhen):

%Vor%     
Birei 05.01.2012 13:01
quelle
3

Sie können auch eine etwas einfachere Version ausprobieren:

%Vor%     
cincura.net 05.01.2012 13:32
quelle
1

Das sollte es tun:

%Vor%     
ridgerunner 05.01.2012 13:40
quelle
1

Was ist mit der Verwendung von Regex? Hier ist Code-Schnipsel (für die Konsole)

%Vor%     
Nika G. 05.01.2012 13:42
quelle

Tags und Links