我想以類似.split()
(因此產生一個列表)的方式拆分字符串,但以更聰明的方式:我希望它分割成塊是最多15個字符,但不分裂中期詞這樣:分割使用空格分隔符和最大長度的字符串
string = 'A string with words'
[splitting process takes place]
list = ('A string with','words')
在這個例子中的字符串「與」和「字」,因爲這是你可以把它分解的最後的地方和第一之間的分裂位爲15個字符或更少。
我想以類似.split()
(因此產生一個列表)的方式拆分字符串,但以更聰明的方式:我希望它分割成塊是最多15個字符,但不分裂中期詞這樣:分割使用空格分隔符和最大長度的字符串
string = 'A string with words'
[splitting process takes place]
list = ('A string with','words')
在這個例子中的字符串「與」和「字」,因爲這是你可以把它分解的最後的地方和第一之間的分裂位爲15個字符或更少。
>>> import textwrap
>>> string = 'A string with words'
>>> textwrap.wrap(string,15)
['A string with', 'words']
簡單和工作,它蜱所有的箱子! – chrism 2010-04-12 14:25:19
最好的部分是該軟件包通常已經在 – 2014-06-23 19:07:09
您可能正在尋找使用正則表達式。 Python re模塊具有split
函數,但我認爲通過簡單匹配組可以更好地服務。
>>> re.findall(r'(.{,15})\s(.*$)', 'A string wth words')
[('A string wth', 'words')]
[編輯]抱歉,錯過了你想要多個塊的地方。我打算在這裏放一個更復雜的正則表達式,但上面引用的textwrap模塊就是爲此而做的。如果你願意的話,我會離開擴展正則表達式作爲練習。
我喜歡這樣,因爲它不會分解或丟失超過15個字符的單詞,這是基於我非常有限的測試。 – 2010-04-12 14:09:51
你可以這樣做兩種不同的方式:
>>> import re, textwrap
>>> s = 'A string with words'
>>> textwrap.wrap(s, 15)
['A string with', 'words']
>>> re.findall(r'\b.{1,15}\b', s)
['A string with ', 'words']
注意,在空間處理上的微小差異。
這兩種好的可能性,但要注意的是,它們都不能處理長度超過15個字符的單詞。>>> >>> s ='帶有超級文字級單詞的字符串' >>> textwrap。 (s,15) ['s with s','upercalifragili','stic words'] >>> re.findall(r'\ b。{1,15} \ b',s) [ '帶有','字'的字符串] ' – 2010-04-12 14:10:50
定義「非常好」。如果你正在包裝文本,並且一個單詞的長度超過了終端的寬度,那麼你非常希望將這個單詞分割爲終端寬度的塊,因爲這個寬度是一個硬限制。 – jemfinch 2010-04-12 14:13:28
如何處理超過15個字符的單詞? – SilentGhost 2010-04-12 14:01:12
字符串編輯嚴重,所以我可以確保編輯器永遠不會使用超過15個字符的單詞 – chrism 2010-04-12 14:14:37