从Python中的给定字符串中删除奇数\n,\ t,\ r \n和空格组合

Phi*_*hil 1 python string split replace python-2.7

我有一个长字符串,其中包含\n,\n,\ t和\n之间的各种组合以及单词和其他字符之间的空格.

  • 我想将所有多个空格减少到一个空格.
  • 我想将所有\n,\ r,\ t组合减少为单个换行符.
  • 我想将所有\n,\n,\ t,\ t和空格组合减少到单个换行符.

我试过''.join(str.split())各种各样的方法没有成功.

  • 这里正确的Pythonic方式是什么?

  • Python 3.x的解决方案会有所不同吗?

防爆.串:

ex_str = u'Word   \n \t \r   \n\n\n word2    word3   \r\r\r\r\nword4\n    word5'
Run Code Online (Sandbox Code Playgroud)

期望的输出[new new-line = \n]:

new_str = u'Word\nword2 word3\nword4\nword5'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

使用组合str.splitlines()并在所有空格上拆分str.split():

'\n'.join([' '.join(line.split()) for line in ex_str.splitlines() if line.strip()])
Run Code Online (Sandbox Code Playgroud)

这分别对待每行,删除空行,并在折叠的所有空格每行成单个空格.

如果输入是Python 3字符串,则相同的解决方案适用于两个Python版本.

演示:

>>> ex_str = u'Word   \n \t \r   \n\n\n word2    word3   \r\r\r\r\nword4\n    word5'
>>> '\n'.join([' '.join(line.split()) for line in ex_str.splitlines() if line.strip(' ')])
u'Word\nword2 word3\nword4\nword5'
Run Code Online (Sandbox Code Playgroud)

为了保存标签,你需要剥离和拆分的只是空间,并筛选出空字符串:

'\n'.join([' '.join([s for s in line.split(' ') if s]) for line in ex_str.splitlines() if line.strip()])
Run Code Online (Sandbox Code Playgroud)

演示:

>>> '\n'.join([' '.join([s for s in line.split(' ') if s]) for line in ex_str.splitlines() if line.strip(' ')])
u'Word\n\t\nword2 word3\nword4\nword5'
Run Code Online (Sandbox Code Playgroud)