# Regex zur Erkennung von Strassenname und Nummer



## EOB (1. Aug 2007)

hi,

ich suche einen regex, welcher mir strassenname und nummer splittet. alsom er soll alle variationen erkennen, die auftreten können. das wären zb:

- Birkenweg 58
- Bornaische Str. 101
- Nikolaistr. 3
- Birkenweg 104c
- An der Schönauer Allee 12
- Gerlachstr. 42, bei Schulz
- Gerlach Str. 42, c/o 180
- Chapeaurougeweg 32 bei abcde

Ich denke, die obigen decken alles ab, was ich bräuchte. ich dachte mir, einen regex nehmen und dann mittels split die hausnummer und die eigentliche strasse trennen. oder hat jemand eine bessere idee?

danke


----------



## SlaterB (1. Aug 2007)

du musst zu jedem Beispiel noch dazuschreiben, was damit passieren soll


-------

willst du auch Mannheim-Straßen wie A 5 4 berücksichtigen? 
http://de.wikipedia.org/wiki/Quadratestadt


----------



## mikachu (1. Aug 2007)

da ja einige gegen die anwort "google.de" sind, antworte ich mit wikipedia


----------



## EOB (1. Aug 2007)

also es soll eben dann sowas rauskommen:

array[0] = strasse
array[1] = strassennummer

ich hab bis jetzt diesen regex, bin mir aber nicht sicher, ob er alle fälle abdeckt.

_
(?i)(\\w)+( |\\.)\\d*(?i)\\w*
_

könnte man den noch verbessren, bzw. was für fälle hab ich nicht bedacht? wobei dieser regex ja erstmal nur matcht, abre zum splitten geht er nicht, also sowas:


```
string[] sa = stringMitStrasseUndHausnummer.split("?????");
```

danke


----------



## mikachu (1. Aug 2007)

warum dann regex's?
oder soll das nur ne übung sein... ?!?


```
String adresse = "Chapeaurougeweg 32 bei abcde";
String parts = adresse.split( " " );
String[] strHnr = new String[2];
String strasse = "";
for( String part : parts )
{
    if( Character.isDigit( part.charAt( 0 ) ) )
    {
        if( part.charAt( part.length - 1 ) == ',' ) part = part.substring( 0, part.length - 2 );
        strHnr[1] = part;
        break;
    }
    strasse += part + " ";
}
strHnr[0] = strasse;
```

iss zwar unschön, aber klappt vll
#untested#


----------



## EOB (1. Aug 2007)

muss kein regex sein! wie würde es denn noch gehen ... denkst du an substring etc?

grüße


----------



## P3AC3MAK3R (1. Aug 2007)

Die einfachste Lösung besteht sicherlich darin, die Informationen einfach in mehreren Feldern abzuspeichern.


----------



## EOB (1. Aug 2007)

ja, sicher. aber so ist es nunmal nicht. was gäbe es denn für alternativen, bzw. warum nicht mit regex? ich hab mal einen zusammengeklappert, welcher aber nicht funzt. wie gesagt, ich möchte dann strassennamen und nummer jeweils einzeln haben.

_
(\\.| )(?=(\\d*(?i)\\w*))
_

macht aber nicht, was ich will .... noch ideen?


----------



## EOB (1. Aug 2007)

keiner mehr ideen?


----------



## P3AC3MAK3R (1. Aug 2007)

EOB hat gesagt.:
			
		

> keiner mehr ideen?


Threadpushing ist generell keine gute Angewohnheit. Wenn jemand eine Idee hat, wird er sie schon posten.

Wie ist es z. B. bei der Adresse "Gerlachstr. 42, bei Schulz"? Willst Du da nur "Gerlachstr." und "42" weiterverarbeiten oder auch das "bei Schulz"?


----------



## SlaterB (1. Aug 2007)

ich persönlich weiß immer noch nicht was du willst,
z.B.
Gerlach Str. 42, c/o 180 
soll das in 
Gerlach Str. ||| 42, c/o 180 
oder
Gerlach Str. 42, c/o ||| 180 
getrennt werden?
nach welchem Kriterium?

was ist bei

Gerlach Str. 42 Gerlach Str. 42
?
was ist bei
Straße des 17. Juni 17
?


----------



## EOB (1. Aug 2007)

also es soll immer nur die wirkliche strassennummer mit eventuellen anhängen rauskommen und eben die strasse. mal deine beispiele:

Gerlach Str. 42, c/o 180  --> Gerlach Str. *und* 42, c/o 180 
Straße des 17. Juni 17 --> Straße des 17. Juni *und* 17
Straße des 17. Juni 20 (bei XYZ klingeln) --> Straße des 17. Juni *und* 20 (bei XYZ klingeln)
Gerlach Str. 42 Gerlach Str. 42 --> Gerlach Str. *und* 42 --> wobei solche fälle ruhig als ungültig gekennzeichnet werden können.  

es müssen jetzt nicht alle kombinationen abgedeckt werden, aber eben die gebräuchlichsten. mehr details?

ich danke euch!!


----------



## SlaterB (1. Aug 2007)

naja gut, was soll ist klar, die Frage ist nach welchem Kriterium du unterscheiden möchtest,

man kann sich ja Grenzfälle basteln, in denen es selbst für den Menschen nicht sinnvoll zu unterscheiden ist

Straße des 17. Juni 20
Straße des 17. Juni 2004
Straße des 17. Juni 2004 34

ich frage dich das auch nur, damit du für dich selber das Kriterium alogorithmisch genau formulierst und dir daher selber einen Algorithmus schreiben kannst


----------

