Seite 1 von 1

RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 09:34
von luvlinux
Moin moin,

ich versuche festzustellen, ob eine gültige PLZ in einem String vorhanden ist (ob die PLZ tatsächlich existiert, spielt keine Rolle). Mein Ansatz ist:

Code: Alles auswählen

import re

text = "01234"

if re.search("[0-9]{5}", text):
    print('gültige PLZ enthalten')
Klappt ja auch soweit, aber wenn ich eine Zahl anhänge, also "012345" bekomme ich immer noch eine Gültigkeitsmeldung. Ich habe versucht ein Ende mittels $ - wie ich das von den Django-urls her kenne - einzufügen

Code: Alles auswählen

("[0-9]{5}$", text)
was bei "012345" auch zur einer Gültigkeitsmeldlung führt.

Kann mir jemand sagen, wo mein Denkfehler ist und warum $ in diesem Fall auch nichts bringt?

Danke schon jetzt für eure Antwort.

Re: RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 09:52
von Sirius3
luvlinux: das $ funktioniert nicht, weil einfach statt der ersten 4 Ziffern die letzten 4 gefunden werden, was davor steht ist `re.search` egal. Welche Art von Strings sollen denn getestet werden? Wenn Du nur die PLZ hast, dann ist ein Test `len(text) == 5 and text.isdigit()` klarer, als ein regulärer Ausdruck.

Re: RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 11:08
von noisefloor
Hallo,

Code: Alles auswählen

\b\d{5}\b
sollte passen. Quelle: Thread by SO.

Gruß, noisefloor

Re: RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 11:59
von eckhard
Hallo,

gesucht werden soll nach fünf aufeinanderfolgenden Ziffern, denen keine Ziffer vorausgeht oder nachfolgt. Dies geht mit

Code: Alles auswählen

import re
plz =  '12345 1234567 12 1 11111 q34567a 45678'
print(re.findall((r'(?<!\d)\d{5}(?!\d)'), plz))
Ausgabe:
['12345', '11111', '34567', '45678']

(noisefloor: \b würde q34567a nicht erkennen)

eckhard

Re: RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 12:15
von noisefloor
Hallo,
gesucht werden soll nach fünf aufeinanderfolgenden Ziffern, denen keine Ziffer vorausgeht oder nachfolgt. Dies geht mit
Gesucht wird eine PLZ, also eine "freistehende" 5-stellige Zahl. 12345q ist kein gültige deutsche PLZ...

Gruß, noisefloor

Re: RegEx für Postleitzahl auf 5 Stellen begrenzen

Verfasst: Mittwoch 20. September 2017, 13:37
von luvlinux
@noisefloor
Danke, das mit den Word Boundaries \b war, was ich benötige.
Ich musste lediglich meiner search-Anweisung ein 'r' hinzufügen, da es sich um einen rawstring handelt, welcher dann folgt. Ohne das r geht es nicht.
Jetzt sieht der Code so aus und funzt einwandfrei: :D

Code: Alles auswählen

import re
text = "11234"
if re.search(r'\b\d{5}\b', text):
    print('gültige PLZ enthalten')
Auch noch vielen Dank für die weiteren Antworten, die mir aufgezeigt haben, dass ich das $-Zeichen falsch interpretiert habe.

Gute Zeit euch allen.