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

Viewed 5528

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'
4 Answers

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.

The easiest way to do this would be with split and join.

>>> (' '*n).join(s.split())

Note : The ' '*n is just for convenience in case of the need to join with many whitespaces in between.

#driver values :

IN : s = 'a  b    b'
     n = 1
OUT : 'a b b'

IN : s = '  a b   c  '
     n = 2
OUT : 'a  b  c'

Try this.

def spaces_btw_characters(word, spaces):
    return (' '*spaces).join(word.split())

We yourstring.strip() for string to finish spaces from start and end. You can use join() on your string to format string according to your need. Hope this helps you.

Related