With the invaluable help of @Sandra_Rossi I used REDUCE to solve my problem:
I got however a couple of edge-cases like
where I could recognize a new rule:
Specific words (like "am", "an der", "vorm", "gemfr." or the shortcuts "b" / "a" / "d" (as a word, delimited by spaces)) are exceptions to the rules defined above in the REDUCE and should remain in lower-case.
I believe that the specific words that remain in lower case should be specified in a list that should be updated each time new words like this are discovered.
I also discovered some street-names that need a special treatment as well
Here I would think that a second list would be helpful with such exceptions that are so rare that an exact description of the desired output could be the most helpful.
Do you have an idea how could I accomplish all of this?