通过保留最小行宽来替换多行字符串中的char

时间:2018-08-28 06:19:01

标签: python string

我有一个多行字符串,长度应保持3。但是,空格被卡在一个或多个字符串中,我想删除它们:

s = '''123
4 56
7 8'''

print(s)

lines = s.splitlines()
for idx, line in enumerate(lines):
    for _ in range(len(line) - len('123')):
        lines[idx] = line.replace(' ', '')

s = '\n'.join(lines)
print(s)


123
4 56    # problematic line
7 8
123
456     # fixed line
7 8     # this line should not change, as the white-space here does not make the line longer than length 3

这给了我想要的输出(即所有行的长度为3(我不想删除任何不违反长度3规则的空格),而只有白色-空格已删除),但是有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

您可以将count作为参数传递给str.replace,以指定最大替换量。

列表理解还可以用来缩短代码。

s = '''123
4 56
7 8'''

lines = [line.replace(' ', '', len(line) - 3) for line in s.splitlines()]

s = '\n'.join(lines)

print(s)

请注意,负数count可以简单地解释为0,因此即使可以返回负值,也可以使用len(line) - 3

输出

123
456
7 8

答案 1 :(得分:1)

这是一种方法。

演示:

s = '''123
4 56
7 8
123
456
7 8'''

print("\n".join(i.replace(' ', '') if len(i) != 3 else i for i in s.splitlines()))

输出:

123
456
7 8
123
456
7 8