Python中是否有一个字符串折叠的库函数?

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))))

附言:感谢好的观察。在我的情况下,' '.join(input.split()) 实际上比使用预编译的 r'\s+' 正则表达式进行搜索和替换快大约两倍。


1
为什么问题标题中有“跨平台”一词?Python中的几乎所有内容都是跨平台的,除了特定于操作系统的内容。除非您省略了某些内容,否则这显然不是特定于操作系统的问题。 - S.Lott
好的观点。我不知道在Python中'\n'字符是跨平台的。我以为'\n'字面上意味着一个特殊的ASCII字符。 - Evgeny
它确实意味着一个特殊的ASCII字符。该字符在所有平台上都是相同的——换行符。 - Bryan Oakley
在Windows中,换行符是\r\n,在Mac中是\r,虽然\n表示新的一行,但在Python中似乎会匹配所有三种情况。不过我自己还没有测试过。 - Evgeny
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

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'

0
multi_line.replace('\n', '')

会完成任务。'\n'是Python中通用的换行符。


1
谢谢,知道了。但是它不会很好地工作,因为它不会在需要的地方插入空格,也不会删除重复的空格。 - Evgeny
我不确定@Evgeny所说的“空白处”是什么意思,但无论如何,所提出的解决方案都没有解决OP的“无重复空格”的要求。 - John Machin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接