RegEx für Postleitzahl auf 5 Stellen begrenzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Code: Alles auswählen

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

Gruß, noisefloor
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

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
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

@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.
Antworten