第一种方法(不起作用)
>>> a = '213 45435 fdgdu'
>>> a
'213 45435 fdgdu '
>>> b = ' '.join( a.split() )
>>> b
'213 45435 fdgdu'
如您所见,变量 a 在“有用的”子字符串之间包含大量空格。不带参数的 split() 函数和 join() 函数的组合清除了多个空格中的初始字符串。
当初始字符串包含特殊字符(例如 '\n')时,前面的技术会失败:
>>> a = '213\n 45435\n fdgdu\n '
>>> b = ' '.join( a.split() )
>>> b
'213 45435 fdgdu' (the new line characters have been lost :( )
为了纠正这个问题,我们可以使用以下(更复杂的)解决方案。
第二种方法(作品)
>>> a = '213\n 45435\n fdgdu\n '
>>> tmp = a.split( ' ' )
>>> tmp
['213\n', '', '', '', '', '', '', '', '', '45435\n', '', '', '', '', '', '', '', '', '', '', '', '', 'fdgdu\n', '']
>>> while '' in tmp: tmp.remove( '' )
...
>>> tmp
['213\n', '45435\n', 'fdgdu\n']
>>> b = ' '.join( tmp )
>>> b
'213\n 45435\n fdgdu\n'
第三种方法(作品)
在我看来,这种方法有点pythonic。核实:
>>> a = '213\n 45435\n fdgdu\n '
>>> b = ' '.join( filter( len, a.split( ' ' ) ) )
>>> b
'213\n 45435\n fdgdu\n'