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

标签 python string python-2.7 replace split

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

  • 我想将所有多个空格缩减为一个空格。
  • 我想将所有\n、\r、\t 组合缩减为单个换行符。
  • 我想将所有\n、\r、\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'

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

new_str = u'Word\nword2 word3\nword4\nword5'

最佳答案

结合使用 str.splitlines() 并使用 str.split() 拆分所有空白:

'\n'.join([' '.join(line.split()) for line in ex_str.splitlines() if line.strip()])

这会分别处理每一行,删除空行,然后每行将所有空格折叠成单个空格。

如果输入是 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'

要保留制表符,您需要剥离和拆分只是 空格并过滤掉空字符串:

'\n'.join([' '.join([s for s in line.split(' ') if s]) for line in ex_str.splitlines() if line.strip()])

演示:

>>> '\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'

关于python - 从 Python 中的给定字符串中删除奇数\n、\t、\r 和空格组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809119/

相关文章:

c# - 在 CLR 中如何创建和管理字符串?

java - 如何最好地参数化字符串

python - 如何使rpm模块与(非系统)Python2.7一起工作

python - 如何使用 reduce with list of lists

python - 为什么int是number.Number的子类?

python - 在opencv python中每秒处理一帧

python - 如何在 python 中的数据文件中将数组作为列元素写入并稍后在 C 中读取?

string - Dart String 可迭代接口(interface)

bash - 如何以用户身份运行 openERP 但使用不同的数据库用户名?

python - 如何在Python中使用顶级路径导入?