每80个空格分割一次字符串

时间:2019-02-16 04:22:34

标签: python

例如,我有一个6400个数字的字符串,我想将其放入80x80的字符串格式

string1 = '1 2 3 4 5 6 7 8 9'

我想做的是这样:

string2 = '''1 2 3
             4 5 6
             7 8 9'''

*数字的长度也不同

我尝试使用split(),但是我不知道如何“计算”空格数量并将其放入一个大字符串中

3 个答案:

答案 0 :(得分:5)

您可以在空间上分割并遍历整个空间,以制作给定大小的块:

string1 = '1 2 3 4 5 6 7 8 9'

size = 3
splits = string1.split()

print('\n'.join(' '.join(splits[j] for j in range(i, i+size)) for i in range(0, len(splits), size)))

# 1 2 3
# 4 5 6                                                                                      
# 7 8 9

答案 1 :(得分:5)

可变长度数字?只需使用正则表达式即可。

import re

string1 = '1 22 333 4444 55555 666666 77777777 888888888 9999999999'
string2 = '\n'.join(re.findall('((?:\S+ ){2}\S+)', string1))

(?:)使得您可以重复一个组,但不会在比赛中捕获该组,这使得直接加入成为可能。没有它,您将得到元组。

re.sub也可以。

string2 = re.sub('((\S+ ){2}\S+) ', lambda m: m.group()+'\n', string1)

您当然会使用{79}而不是{2},它会重复使用'\S+ '模式(一个或多个非空白字符后跟一个空格),因此您不必必须把它写出来。

答案 2 :(得分:3)

您可以通过按设置的块大小将字符串切片来实现此目的

# Print a new line every 6 characters
# Change this as needed
chunk_size = 6

# The string to split
s =  '1 2 3 4 5 6 7 8 9'

# Iterate over a range of numbers 0 to the length of the string
# with a step size of `chunk_size`
# With `chunk_size` as 6, the range will look like
# [0, 6, 12]
for i in range(0, len(s), chunk_size):
    # Slice the string from the current index
    # to the current index plus the chunk size
    # ie: [0:6], [6:12], [12:18]
    print(s[i:i+chunk_size])

print()

# To do this with list comprehension
s2 = "\n".join(s[i:i+chunk_size] for i in range(0, len(s), chunk_size))
print(s2)

# Ouptut:
# 1 2 3
# 4 5 6
# 7 8 9

或者,如果您有可变长度的数字,请按照Austin所说的做,然后将相同的概念应用于字符串的拆分版本

chunk_size = 3
s = '10 20 30 4 5 6 7 8 9'.split()

for i in range(0, len(s), chunk_size):
    print(" ".join(s[i:i+chunk_size]))

print()

s2 = "\n".join(" ".join(s[i:i+chunk_size]) for i in range(0, len(s), chunk_size))
print(s2)

# Output:
# 10 20 30
# 4 5 6
# 7 8 9