如何根据字符数拆分长字符串

时间:2015-05-29 08:12:54

标签: python string list

我正在创建一个基于字符数连接的长段落列表。

作为示例:如果字符数设置为100,则包含长段的字符串应拆分为多行,最大限制为100.行不应包含不完整的单词(如果该行包含单词的一部分)它应该移到下一行)。

我可以分割字符串,但我不能想到处理不完整的单词(单词是与空格分隔的字符集)。

最后,这些行应该作为列表返回。

2 个答案:

答案 0 :(得分:3)

以下是使用textwrap库的示例:

import textwrap

text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
lines = textwrap.wrap(text, width=100)
print('\n'.join(lines))

输出:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.

方法textwrap附带了许多其他关键字参数。有关详细信息,请查看文档。

答案 1 :(得分:2)

首先,将所有文本拆分为单词:

words = [w for w in text.split(' ') if w]

然后遍历单词并将它们逐个添加到新字符串中,直到它的长度不超过限制。在这种情况下,将字符串添加到结果列表中,然后开始创建下一个字符串。

MAX_LENGTH = 100

results = []
r = ''

for w in words:
    if len(r) + len(w) + 1 > MAX_LENGTH:
        results.append(r)
        r = ''
    r += '{}{}'.format(' ' if r else '', w)

print results