String harmonization in Python Just landed on a Entity Resolution (Matching) project.
I am working in python and I was wondering if there's an off-the-shelf implementation of string harmonization functions, including:


removal of trailing spaces
removal of multiple spaces
removal of special characters (eg. ü)
...


All this is easily done with string and Regex operations but I do not want to reinvent the wheel and tap into something already ready (and perhaps learn from that, shall I need to move on to something custom later).
Are there readily available libs for that? Tried nltk, which suggests the use of regex expression, textblob, and googling around but found nothing really helpful so far - probabily because I did not get to use the right keyword.

As an example, it would be useful to have a function that replaces special characters from foreign languages with morphological equivalents - for example "ß" in German with "ss" ("straße" -> "strasse")

Edit: clarification
In my question, I am not really specifying the problem at hand. This is because what I am trying to get to is really a "grammar" that would let me and the other ppl in my team define workflows of harmonization/canonicalisation operations. 

I am at the moment Working on this as a chain of functions f: string -> string. Whether some steps are part of it, it will depend on the problem at hand. Workflow will be likely tested empirically (we'll pick the workflow that leads to the best performing algo)
Note: this is more frequently called canonicalisation than harmonisation.  URLify and URL-safe are also terms that can help you in your search.

whitespace
Combining the built-in functions string.split + string.join is a solid way to canonicalise intermediate and trailing whitespace, including tabs, carriage returns and so on.

non-ASCII chars
ASCIIification is actually somewhat contrary to canonicalisation.  That is, you should think hard about whether you really want to be converting 'München' to 'muenchen', rather than 'muenchen' to proper 'München'.

If you do want to go in that direction, you should give more details on the use case and the desired conversions.  Here are some examples of possible input:


  Where is Münsterstraße?
  ısparta'daki istanbul'dakı ve gülenciler!
  Isparta'daki İstanbul'dakı ve Gülenciler!
  ¿Cómo está?
  Это вообще фарс...
  Биће белајааа, чорба
  Biće belajaaa, čorba
  You can now resume your résumé.


Converting to ASCII will be lossy and there are some decisions to make, often dependent on the source and target language.

If you define the likely input, scope and desired behaviour then others can make recommendations.