Hallo,
ich möchte die Straße und die Hausnummer trennen. Grundlegend habe ichs auch, aber recht umständlich. Ich schaue zuerst, ob ein Punkt drin ist, wenn ja, splitte ich am Punkt. Das ist einfach. Dann kommt der Teil mit Leerzeichen. Hier habe ich Probleme.
Ich schaue zuerst nach dem letzten Leerzeichen uns splitte dann dort. Das Klappt aber nicht für Muster Gasse 1 a, da dann die Hausnummer das "a" wäre. Wie könnte ich vorgehen?
Danke 🙂
Such mal nach Regex (regular expression), dass könnte dir helfen.
Ich geh mal davon aus, daß zwischen Straße und Hausnummer mindestens eine Leerstelle liegt...
(?<strasse>.*?)\s+(?<hausnr>\d+\s*.*)
... und ich geh mal davon aus, daß du die Verwendung regulärer Ausdrücke in C# nicht kennst:
Match tMatch = Regex.Match(t_AdresseStrHNr, @"(?<strasse>.*?)\s+(?<hausnr>\d+\s*.*)");
if(tMatch != null)
{
string t_Strasse = tMatch.Groups["strasse"].Value;
string t_HausNr = tMatch.Groups["hausnr"].Value;
}
t_AdresseStrHNr musst du natürlich vorher entsprechend füllen. Sehr beispielhafter Code.
Eigentlich ist es unsauber, t_Strasse und t_HausNr in dem if-Block anzulegen... man kann natürlich auch, wenn tMatch == null ist, irgendwie aus der Funktion aussteigen... naja, soll ja auch nur das Prinzip verdeutlichen...
Folgende Adresse gibt es :
Hauptstraße 17
Hauptstraße 17a
Hauptstraße 17 b
Hauptstraße 17 B1
Hauptstr.17
Hauptstraße 10 App. 123
Hauptstraße 17 1.Stock
Hauptstraße 17 2. Stock
An der Schleuse 18
Viel Spass beim Herausfinden was nun die Hausnummer ist.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Also meine Variante funktioniert mit
Hauptstraße 17
Hauptstraße 17a
Hauptstraße 17 b
Hauptstraße 17 B1
An der Schleuse 18
soweit einwandfrei... man könnte das Muster sicherlich entsprechend der anderen Varianten anpassen.
Hallo Seven e.Q.,
Klasse !
Werde ich auch gleich mal testen.
Danke 😁
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Viel Spass beim Herausfinden was nun die Hausnummer ist. [...]
Da habe ich noch ein paar nette:
Sallweg 1-3a Haus 1 R8
An die 2. Scharte
M3
😉
Robert Wachtel
(?<strasse>.*?)[\s+\.](?<hausnr>\d+\s*.*)
funktioniert nun auch mit
Hauptstr. 17
Hauptstr.17
Hauptstr. 17 b
Hauptstr. 17b
Hauptstr.17 b
Hauptstr.17b
Haupt Str. 17
Haupt Str.17
Haupt Str. 17b
und so weiter...
Wobei der Punkt dann nicht mehr zum Straßennamen gehört.
(?<strasse>.*?\.*)\s*(?<hausnr>\d+\s*.*)
damit gehört der Punkt dann auch zum Straßennamen.
Das grenzt ja schon an AI (Künstliche Intelligenz).
😉
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Das grenzt ja schon an AI (Künstliche Intelligenz).
😉
Grüße Bernd
Nicht wahr?! 😉 😁
Noch ein paar Vorschläge zur Erweiterung der KI:
Straße 523 Nr. 18 oder
Str. 523 Haus 18
Straße F 4 oder
Straße F Nr. 4
Str. d. 17. Juni 135
M3 (von Robert Wachtel) mit Hausnummer als:
M3, 18 oder
M3 Nr. 18 oder
M 3 Haus 18
Weg 0 Nr. 18 (gibt es wirklich mit Null)
Weg B Nr. 18
Gruß Jürgen
Ich habe es selbst versucht umzudrehen für Ausländische Adressen aber es will nicht ganz passen....
Ich setze bei mir vorraus das die Hausnummer immer kürzer ist als die Strasse und wenn das nicht so ist würde ich das regex gerne umdrehen, komme aber nicht ganz zum erfolg.
(?<hausnr>\d+\.*)\s*(?<strasse>.*?\.*.*)
zb Frankreich, USA usw haben die Hausnummer oft vorne...
Wer kann helfen?
LG Kruegge
Uaaah, Zombiethreadapokalypse! 😄
Ich bin mir nicht sicher, ob's eine on-fits-all Lösung dafür gibt. Aber wahrscheinlich irgendwas mit look-ahead. Ich bin auch schon eine Weile raus aus diesem Thema. So... ca... 12 Jahre.
muss nicht all in one sein, mir für die ober lösung schon reichen, wenn es sauebr funktioniert ds die Hausnummer zuerst steht...
Ich kann keine Frage in Deinen Beiträgen erkennen. Sollen wir Dir den Regex anpassen, oder wie?
Wenn ich Google-Suche nach regex us address zeigt Google sofort folgenden Vorschlag vor:
^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,})$|^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,})$|^\d{1,6}\040([A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,}\040[A-Z]{1}[a-z]{1,})$
Alternativ regexlib - Street
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ja ds wäre sehr hilfreich wenn du mir helfen könntest deinen regex umzudrehen, einfach nur das die kombinationen funktuonieren, wenn die Hausnummer vorne steht., weil das auf viele Länder zutrifft und bei meinem versuch klappt das nicht 100%ig.
Der RegEx sucht bereits am Anfang nach der Hausnummer, daher auch der hinweis auf die US Suche von Abt.
Wenn du einen spezifischen RegEx suchst, dann such bei Google selbst.
Für eine saubere Umsetzung müsstest du auch pro Land den richtigen RegEx nutzen, da einfach nach Hausnummer vorne oder hinten, kein sinnvoller Ansatz ist um die Adressen richtig zu parsen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.