Hallo,
beschäftige mich seit vielen Jahren mit dem Thema. Die perfekte Lösung gibt es nicht.
Die besten (aber nicht perfekten) Ergebnisse habe ich bisher mit folgender Logik erreicht:
- von rechts nach links alles nehmen, was keine Ziffer ist. (Teil 3)
- dann alles nehmen, was kein Buchstabe ist. (Teil 2)
- Alles was davor ist, ist die Straße. (Teil 1)
- Alle drei Teile von führenden und folgenden Leerzeichen bereinigen.
Die Hausnummer hat man in Teil 2 und alles was hinter der Hausnummer ist (Teil 3), kommt in ein Feld Hausnummernzusatz. Die Trennung von Straße nur in Straße und Hausnummer ist nicht sinnvoll, spätestens bei Adressvergleichen stört alles, was in der Hausnummer steht, aber eigentlich nicht zur Hausnummer gehört.
Ggfls. kann man bei Teil 3 noch prüfen, ob er nur aus einem Buchstaben besteht, um Hausnummern der Form 12a zu separieren.
Diese Logik scheitert im o.g. Beispiel von Berlin, aber auch in Mannheim (siehe z. B.
http://rhein-neckar-wiki.de/Stra%C3%...%28Mannheim%29) oder bei Straßennamen der Form
An der B 222 1a. Hier ist die
222 noch Teil des Straßennamens und
1a die Hausnummer. Und natürlich scheitert es auch bei o. g.
Schlossberg 12, 3. Stock.