Wie mit RegEx Hausnummer auslesen?
Hallo zusammen,
ich steh beim Einsatz von RegEx auf dem Schlauch.
Beispiel:
Hauptstr. 11
Ich bekomme mit [0-9], bzw. [^0-9] die Straße und die Hausnummer sauber getrennt.
Wenn ich jetzt allerdings einen Zusatz habe z.B.: Hauptstr. 11/b komme ich nicht mehr weiter.
Wie muss ich das RegEx erweitern, so dass ich alles hinter den Zahlen in die Hausnummer und nicht in die Straße bekomme?
Vielen Dank im Voraus.
5 Antworten
Indem Du Zahlen und alles darauf Folgende mit nimmst.
\d+.*
Allerdings fällt das zusammen, wenn im Straßennamen auch eine Zahl steht.
Wenn dir das nicht genau genug ist, musst Du dir erst überlegen, wie Du matchen willst. Regex ist keine Magie, das kann auch nur, was Du vorher genau definiert hast.
Naja, hier handelt es sich um Namen, eine Garantie, dass es immer 100% zuverlässig ist, wirst Du nicht kriegen.
Ich persönlich würde vermutlich das letzte Vorkommen von einem Leerzeichen, min. einer Zahl und allen Zeichen ohne Leerzeichen suchen.
Ergo:
\s+(\d+[^\s]*)\s*$
Auch das ist nicht zuverlässig, aber dann baue ich lieber ein Feature ein, die erkannte Hausnummer nochmal zu korrigieren.
Puh, Hausnummern können komisch sein.
Kannst natürlich eine Zahl und danach alles matchen [0-9].*
Schau mal auf https://regex101.com da gibt es auch gute Erklärungen für Regex und man kann gut testen.
Wäre bei so was aber vorsichtig, ich hatte es schon öfter das ich Probleme hatte meine Adresse einzugeben eben weil irgendwas nicht beachtet wurde. Manchmal gibts auch Zimmernummern in Wohnheimen usw. die Leute da angeben. Viel zu beachten.
Top, vielen Dank - dann schau ich da mal rein.
Ja, Hausnummern können viel Spaß bereiten ... :-/
Soll mal eine erste Anlaufhilfe werden um den Großteil angehen zu können. Mit dem Rest muss man dann schauen.
Die Nummer, bzw. Zusätze habe ich jetzt mal gut rausbekommen.
Jetzt geht es nur noch drum, die Straße sauber abzugrenzen.
Hauptstr. 11/b wird mit [0-9]+[^a-z] zu Hauptstr.b
Muss es denn ein Regex sein? Ich hätte die Idee einfach die split() Methode für Strings zu verwenden. Der übergibt man ein Zeichen nach dem getrennt werden soll z.B. ein Leerzeichen und dann wird gibt die Methode einem einen Array zurück mit den Teilstrings.
In dem Fall ja.
Ich habe mal eine Leerstelle, mal ein Komma, mal ein Punkt - sprich es ist nicht immer einheitlich, an welcher Stelle ich splitten kann. :-(
Straße:
^([^,0-9]+)
Hausnummer:
[0-9]+.*
Ich habe die Syntax jetzt nicht genau im Kopf, aber:
Beliebiges Zeichen beliebig oft an die Nummer anhängen?
ich denke, das war [0-9].*
Klasse, vielen Dank.
Die Syntax hat mir weitergeholfen: [^0-9]+[*.]
Damit klappt es.
Jetzt will ich für die Straße noch versuchen, alles was ab der ersten Zahl kommt zu löschen, denn grad kommt noch "Hauptstr.b" an, statt "Hauptstr."
"Leider" ist die Programmierung keine Magie, sondern viel Hirnschmalz.
Der Hinweis hilft mir auch weiter.
Vielen Dank!