4

是否有跨平台库函数可以将多行字符串折叠成没有重复空格的单行字符串?

我在下面提出了一些片段,但我想知道是否有一个标准函数可以导入,甚至可能在 C 中进行了优化?

def collapse(input):
    import re
    rn = re.compile(r'(\r\n)+')
    r = re.compile(r'\r+')
    n = re.compile(r'\n+')
    s = re.compile(r'\ +')
    return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input))))

PS 感谢您的良好观察。' '.join(input.split())似乎是赢家,因为在我的情况下,与使用预编译r'\s+'正则表达式的搜索替换相比,它实际上运行速度快了大约两倍。

4

3 回答 3

12

内置string.split()方法将在空格运行时拆分,因此您可以使用它,然后使用空格加入结果列表,如下所示:

' '.join(my_string.split())

这是一个完整的测试脚本:

TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

print ' '.join(TEST.split())
# Prints:
# This is a test with a mix of tabs, newlines and repeating whitespace
于 2009-08-08T20:43:34.047 回答
4

你的想法是对的,你只需要更仔细地阅读 python 手册:

import re
somewhitespace = re.compile(r'\s+')
TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

somewhitespace.sub(' ', TEST)

'This is a test with a mix of tabs, newlines and repeating whitespace'
于 2009-08-08T20:52:26.807 回答
0
multi_line.replace('\n', '')

将完成这项工作。'\n'是python中的通用行尾字符。

于 2009-08-08T20:20:54.093 回答