Python regex für int mit mindestens 4 Ziffern
Ich bin nur zu lernen, regex und ich bin ein bisschen verwirrt hier. Ich habe einen string, von dem ich zu extrahieren ein int mit mindestens 4-stellig und 7-stellig. Ich versuchte es wie folgt:
>>> import re
>>> teststring = 'abcd123efg123456'
>>> re.match(r"[0-9]{4,7}$", teststring)
Wo ich erwartet hatte, 123456, leider dies führt zu gar nichts. Könnte mir jemand helfen der ein bisschen hier?
Würden Sie nicht erwarten, dass
Ah, ja. Du hast Recht. Entschuldigen Sie mich. Ich korrigierte es.
123456
?Ah, ja. Du hast Recht. Entschuldigen Sie mich. Ich korrigierte es.
InformationsquelleAutor kramer65 | 2013-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
@ExplosionPills ist richtig, aber es wäre immer noch zwei Probleme mit Ihrem regex.
Zunächst
$
entspricht der Ende der Zeichenfolge. Ich vermute, Sie möchte in der Lage, zu extrahieren, eine int in der Mitte der Zeichenfolge als gut, z.B.abcd123456efg789
zurück123456
. Um das zu beheben, Sie wollen diese:Den zusätzlichen portion ist ein negative lookahead-assertion, was bedeutet, "...nicht gefolgt von einer mehr zahlen." Lass es mich vereinfachen, die durch die Nutzung
\d
obwohl:Besser. Nun, das zweite problem. Sie haben keine Einschränkung auf der linken Seite des regex, um so einen string wie
abcd123efg123456789
ist, würde man eigentlich mit3456789
. So müssen Sie einen negative lookbehind assertion:Einfach.
r"(?<!\d)(?:19[5-9]\d|20[0-4]\d|2050)(?!\d)"
. Haben Spaß 🙂Ich denke, im Falle Sie nicht vertraut sind mit diesen Konstrukten sollte ich einige Dinge zu erklären. Ignorieren Sie die
(?: ... )
; einfach so tun, es ist eine Gruppe( ... )
. Und die|
sind Wechsel Operatoren, wie "Dies oder dies ODER dies."Vielen Dank dafür! Der | Konstrukte kenne ich von php, aber ich Frage mich, was über ist der eigentlich ?: und das < am Anfang..?
Die
(?: ... )
dreht einfach eine Gruppe in eine nicht-Aufnahme - Gruppe. Sie wissen, wie( ... )
normal erfasst, was in zwischen in-Variablen wie$1
,$2
usw.? Die?:
einfach verhindert. Es ist gute Praxis, explizit genannt werden, wenn Sie nicht wirklich gehen zu verwenden, die zu erfassen. Die<
am Anfang ist nur die syntax für eine negative lookbehind assertion:(?<! ... )
; die<
soll Aussehen wie ein Pfeil nach hinten.InformationsquelleAutor Andrew Cheong
.match
nur entsprechen, wenn die Zeichenfolge beginnt mit dem Muster. Verwenden.search
.InformationsquelleAutor Explosion Pills
Können Sie auch verwenden:
Wird wieder eine Liste aller Teilzeichenfolgen, die mit Ihrer regex, in deinem Fall ['123456']
Wenn Sie daran interessiert sind nur den ersten übereinstimmenden Teilstrings, dann kann man dies schreiben als:
Hoppla! guter Fang, @dansalmo
InformationsquelleAutor galarant