2015-05-29 100 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帶有許多附加的關鍵字參數。查看文檔以獲取更多信息。