Adresse und Hausnummer mit regular expression

Kannst du den String nicht, wie ich im ersten Post geschrieben habe, anhand seiner Leerzeichen zerlegen? Das letzte Token ist die Hausnummer, alle anderen davor ergeben den Strassennamen. Das sollte eine ziemlich einfache Lösung sein. Bringt natürlich Probleme, falls es Addressen wie "Carl-Friedrich-Gustav Str. 7 a" gibt. :P
 
Code:
    Pattern pattern = Pattern.compile("((\\w+)\\s?)+\\s+(\\d+.*)^"); \\w+=1 oder mehr Wortzeichen ([a-zA-Z]),\\d+=1 oder mehr  Ziffern, \\s = ein leerzeichen
    Matcher matcher = pattern.matcher("Straße 15");
    if(matcher.find()){
      System.out.println(matcher.group(2)); //Straße
      System.out.println(matcher.group(3)); // Hausnummer
    }


So vielleicht ? Ich konnte das aber jetzt nicht testen.
 
Funktioniert gar nicht. Kein Ergebnis, dennoch Danke


Code:
    Pattern pattern = Pattern.compile("((\\w+)\\s?)+\\s+(\\d+.*)^"); \\w+=1 oder mehr Wortzeichen ([a-zA-Z]),\\d+=1 oder mehr  Ziffern, \\s = ein leerzeichen
    Matcher matcher = pattern.matcher("Straße 15");
    if(matcher.find()){
      System.out.println(matcher.group(2)); //Straße
      System.out.println(matcher.group(3)); // Hausnummer
    }


So vielleicht ? Ich konnte das aber jetzt nicht testen.
 
Die Problematik dieser Lösung hast du ja bereits erwähnt ;)
Kannst du den String nicht, wie ich im ersten Post geschrieben habe, anhand seiner Leerzeichen zerlegen? Das letzte Token ist die Hausnummer, alle anderen davor ergeben den Strassennamen. Das sollte eine ziemlich einfache Lösung sein. Bringt natürlich Probleme, falls es Addressen wie "Carl-Friedrich-Gustav Str. 7 a" gibt. :P
 
Habe das nun so gelöst, dass das Frontend zunächst die Daten in getrennten Feldern abfragt und vor der Übergabe an das ERP System das Ganze wieder zu einem Feld zusammenzieht.

Danke für die Ideen.
 
Code:
Straße des 17. Juni 12/c

Hauptstrasse 22-1

Blümchenweg 3

Stuttgarter Strasse 22 - 24 A

Ohne das ich jetzt ein funktionierendes Beispiel hätte, nur so eine Idee.

Wenn du nun den String von hinten nach der ersten Zahl durchsuchst auf die ein Leerzeichen und dann ein beliebiger Buchstabe folgt, dann bekommst du für die obigen Beispiele die Werte

Code:
12/c

22-1

3

22 - 24 A

zurück. Oder täusche ich mich da?

NACHTRAG:
Auch wenn das hier das Java Forum ist, poste ich trotzdem mal eine Lösung wie ich se mit PHP gemacht habe. Den regulären Ausdruck kannst du ja vielleicht trotzdem anwenden.

PHP:
<?php

$strassen = array("Straße des 17. Juni 12/c", "Hauptstrasse 22-1", "Blümchenweg 3", "Stuttgarter Strasse 22 - 24 A");
$muster = " [0-9]{1,5}[/ \- 0-9 a-z A-Z]*";

for ($a = 0; $a < count($strassen); $a++) {
	preg_match_all("! [0-9]{1,5}[/ \- 0-9 a-z A-Z]*!m", $strassen[$a], $matches, PREG_SET_ORDER);
	var_dump($matches);
	echo "<hr />";
}

?>

Damit bekomme ich als Ergebnis dann:

Code:
array(2) { [0] => array(1) { [0] => string(3) " 17" } [1] => array(1) { [0] => string(5) " 12/c" } } 
--------------------------------------------------------------------------------
array(1) { [0] => array(1) { [0] => string(5) " 22-1" } } 
--------------------------------------------------------------------------------
array(1) { [0] => array(1) { [0] => string(2) " 3" } } 
--------------------------------------------------------------------------------
array(1) { [0] => array(1) { [0] => string(10) " 22 - 24 A" } }
 
Zuletzt bearbeitet:
Hallo allesamt,
vielleicht mal ganz unabhängig von Syntax kann das Problem vielleicht so gelöst werden:

- Suche die letzten zusammenhängenden Ziffern
- Nehme diese Ziffern inklusive Rest des Strings

So wäre das Beispiel mit der Hausnummer inklusive Buchstabe jedoch mit witespace dazwischen (s.o. "7 a" anstelle 7a) ebenso drinn, oder?

VG

Takidoso
 
Hallo takidoso,

ja, das müsste auch funktionieren. Hatte tombe aber vor dir schon vorgeschlagen. ;)

Gruß,
Wolf
 
Zurück