Regex para dividir una dirección alemana en sus partes

Buena noches

Estoy tratando de dividir las partes de una cadena de direcciones alemana en sus partes a través de Java. ¿Alguien conoce una expresión regular o una biblioteca para hacer esto? Para dividirlo de la siguiente manera:

Name der Straße 25a 88489 Teststadt

Name der Straße|25a|88489|Teststadt

Teststr. 3 88489 Beispielort (Großer Kreis)

Teststr.|3|88489|Beispielort (Großer Kreis)

ería perfecto si el sistema / regex siguiera funcionando si faltan partes como el código postal o la ciudad.

¿Hay alguna expresión regular o biblioteca con la que pueda archivar esto?

EDIT: Regla para direcciones alemanas:
Street: Personajes, números y espacios
Número de casa: Número y cualquier carácter (o espacio) hasta una serie de números (zip) (al menos en estos ejemplos)
Zip: 5 dígitos
Place o City: el resto quizás también con espacios, comas o llaves

Respuestas a la pregunta(12)

Su respuesta a la pregunta