Search code examples
pythonstringwhitespaceadjustment

Format a string to have n spaces only between words in python


I am working with strings that have different number of spaces between the non-whitespace characters. The problem is that this strings form a category, and they have to be equal. I would like to format them to have exactly the same number of spaces between the non-whitespace characters, f.e. 1, but this could be generalised to insert more spaces if possible. And there should be no spaces at the beginning and end.

Examples with n=1:

'a  b    b' => 'a b c'
'  a b   c  ' => 'a b c'

Solution

  • Simply split it and join the resulting list by space(es)

    >>> " ".join('a  b    b'.split())
    'a b c'
    >>> "  ".join('  a b   c  '.split())
    'a  b  c'
    

    From str.split(sep) docs:

    If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace.