Ich habe Mühe, meinen Fehler zu verstehen. Betrachten Sie diese Beispiele:Python Regex: Match 1 oder 2 Ziffern, am längsten zurück
A 9 Minuten Verspätung
10 Minuten
Verzögerung erfahren möchte ich 9 und 10 extrahieren sind.
So habe ich versucht, dies:
.*(\d{1,2})(?:\s)?(min|m|hour|hr|h|minutes|minute)
Aber für den letzten Fall Gruppe kehrt 0
statt 10
. Ich dachte \d{1,2}
war gierig und würde daher die längste Übereinstimmung zurückgeben. Andere, erfolglose Versuche:
.*(\d+)(?:\s)?(min|m|hour|hr|h|minutes|minute)
.*([0-9]+)(?:\s)?(min|m|hour|hr|h|minutes|minute)
'\ d {1,2}' ist gierig, aber so ist '. *', Und '. *' Wird zuerst gehen. – user2357112
Danke! Ich habe nicht ganz verstanden, wie es funktioniert, aber um es zu beheben, sollte ich einfach tun:. *? – Pep
Ich würde das '. *' Ganz rausnehmen. Wenn Sie eine Funktion verwenden, die implizit die Übereinstimmung am Anfang der Zeichenfolge verankert, tun Sie dies nicht. Wenn Sie zum Beispiel "re.match" verwenden, sollten Sie stattdessen "re.search" verwenden. – user2357112