Adressen an Hausnummer splitten

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
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

Hallo,

ich importiere oft Adressen, diese müssen nach Straßenname und Hausnummer geteilt werden, d.h.:

aus Daumlerstr.3 wird Daumlerstr. 3
aus Wege 2 b soll Wege 2b werden und
Hood23 a soll auch Hood 23a werden.

Das erste ist je nicht wirklich schwer, ich trenne einfach bei dem ersten Leerzeichen von Links, bei den anderen Optionen bin ich mir abe rnicht sicher wie ich das effektiv lösen könnte, wahrscheinlich mit Regular expression. Aber muss da müsste man ja ganz schön viele Sachen hintereinander prüfen...

Hat evtl. jemand ein Snippet für so etwas?

Ansonsten würde ich es auf diese Art machen
Wenn 1. Zeichen von rechts == Zahl:
__wenn 2. Zeichen von Rechts gleich Leerzeichen:
____ok
__wenn 2. Zeichen von Rechts gleich Zahl:
____wenn 3. Zeichen von Rechts gleich Leerzeichen:
______ok
Wenn 1. Zeichen von rechts == Buchstabe:
__wenn 2. Zeichen von Rechts gleich Zahl:
____wenn 3. Zeichen von Rechts gleich Leerzeichen:
______ok
____wenn 3. Zeichen von Rechts gleich Zahl:
______wenn 4. Zeichen von Rechts gleich Leerzeichen:
________ok

usw. gibt natürlich noch einige weitere Verzweigungen und es kann dann auch optimiert werden, aber von der Struktur habe ich hoffentlich verständlich machen können was ich meine...
Sirius3
User
Beiträge: 18261
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo marinjo,

Du suchst nach sowas?

Code: Alles auswählen

import re
RE_ADRESSE = re.compile(r'^(\D*?)\s*(?:(\d+)\s*(\D*))?$')
strasse, hausnr, extra = RE_ADRESSE.match('Daumlerstr.3').groups()
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mit den Anforderungen würde ich einfach an der ersten Ziffer aufteilen und dann die Bestandteile wieder passend zusammenbauen.

Code: Alles auswählen

import re

data = [
    'Daumlerstr.3',
    'Wege 2 b',
    'Hood23 a',
    'D 6, 21',
    'Gemüseweg'
]

for element in data:
    parts = re.split(r'(\d)', element, maxsplit=1)
    #print(parts)
    strasse = parts[0].strip()
    ergaenzung = (''.join(parts[1:])).replace(' ', '')
    print('-{}-{}-'.format(strasse, ergaenzung))
Es gibt allerdings eine Menge sehr merkwürdiger Kombinationen. Das Beispiel D 6, 21 ist beispielsweise eine gültige Adresse in Mannheim.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und dann gibt es auch noch Straßen wie "Straße des 17. Juni", "Platz des 18. März" oder einfach "Straße 1", "Straße 2", ... Die sind auch nicht ganz so selten: in Berlin gibt es davon fast 300. Und natürlich gibt es das hier auch noch mit erhöhtem Schwierigkeitsgrad: auch Straßen wie "Straße 18a" oder "Straße 52b" existieren. Viel Glück ;-)

In Mannheim war man auch noch sehr kreativ: "U3", "U4", "M3a", ... Und zwar der ganze Stadtkern.
Das Leben ist wie ein Tennisball.
Antworten