2010-04-12 18 views
9

.split()'a benzer şekilde bir dizeyi bölmek istiyorum (böylece bir liste oluşturuyor) ancak daha akıllıca: 15 karakter olmakla birlikte, bu yüzden orta kelimeyi bölmek değildir parçalar:Boşlukları ve maksimum uzunluğu kullanarak bir dizgeyi bölme

string = 'A string with words' 

[splitting process takes place] 

list = ('A string with','words') 
bu örnekte dize 'ile' ve 'kelime' buna öyle ayırabilirsiniz son yer ve birinci çünkü arasında bölünür

bit 15 karakter veya daha az olabilir.

+2

15 karakterden uzun sözcüklerle ne yapmalı? – SilentGhost

+0

Dize yoğun bir şekilde düzenlenmiştir, bu yüzden editörün 15 karakterden daha uzun kelimeler kullanmamasını sağlayabiliyorum. – chrism

cevap

27
>>> import textwrap 
>>> string = 'A string with words' 
>>> textwrap.wrap(string,15) 
['A string with', 'words'] 
+0

Basit ve tüm kutularımı işaretleyen işler! – chrism

+0

Ve en iyi bölüm, paketin genellikle –

1

Muhtemelen bir düzenli ifadeyi kullanmak istiyorsunuz. Python re modülünde split işlevi vardır, ancak grupları eşleştirerek daha iyi hizmet vereceğinizi düşünüyorum.

>>> re.findall(r'(.{,15})\s(.*$)', 'A string wth words') 
[('A string wth', 'words')] 

[Düzenle] Üzgünüz, birden çok parça istediğiniz yeri kaçırdınız. Burada daha karmaşık bir regex koymak, ama yukarıda belirtilen textwrap modülü bunun için yapıldı. Seçerseniz, regex'i sizin için bir egzersiz olarak genişletmeyi bırakacağım.

+0

Bunu beğendim, çünkü çok sınırlı testlerime göre 15 karakterden daha uzun kelimeler kırmıyor ya da kaybolmuyor. –

6

Bu iki farklı şekilde yapabilirsiniz:

>>> 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'] 

Not uzay taşıma hafif farkı.

+0

'da olması. Her iki iyi olasılık da, 15 karakterden daha uzun kelimeleri çok iyi işleyemediğinin farkında olunuz. >>> s = 'Supercalifragilistic kelimelere sahip bir dize' >>> textwrap. wrap (s, 15) ['s', 'upercalifragili', 'stic kelimeler' ile bir dize '] >>> re.findall (r' \ b. {1,15} \ b ', s) [ 'Dize ile', 'kelimeler'] ' –

+1

" Çok iyi "tanımlayın. Metni kaydırıyorsanız ve bir sözcük terminalinizin genişliğinden daha uzunsa, bu kelimeyi uç genişliğinizin parçalarına bölmek istersiniz, çünkü bu genişlik bir sınırdır. – jemfinch

İlgili konular