2015-05-29 115 views
0

我正在根据字符数量连接的长段落创建列表。如何根据字符数量拆分长字符串

举个例子:如果字符数被设置为100,那么包含一个长段落的字符串应该分成几行,最大限制为100行。行不应该包含不完整的单词(如果行包含部分它应该移动到下一行)。

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

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

+3

使用工具['fmt'](http://linux.die.net/man/1/fmt)或Python库[''textwrap'](https://docs.python.org/3/库/ textwrap.html)。 – 2015-05-29 08:16:13

+0

请发布一个示例代码,您实际上想要实现的。 。 – csharpcoder

+1

如果你想自己实现这一点,请参阅:http://en.wikipedia.org/wiki/Line_wrap_and_word_wrap – jonrsharpe

回答

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 
+0

Python随附电池。为什么重新发明轮子? – 2015-05-29 08:26:45

+1

@Lutz Horn我不知道,有时候这个目标只是为了展示原始算法的实现。 ) –

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带有许多附加的关键字参数。查看文档以获取更多信息。