2010-04-12 9 views
9

मैं .split() एक अधिक बुद्धिमान तरीका लेकिन में (ताकि एक सूची में जिसके परिणामस्वरूप) करने के लिए एक समान तरीके से एक स्ट्रिंग विभाजित करने के लिए करना चाहते हैं: मैं इस पर इसे विभाजित करना चाहते हैं हिस्सा है कि 15 अक्षरों तक रहे हैं, लेकिन मध्य शब्द इतना विभाजित नहीं कर रहे हैं:विभाजन अंतरिक्ष डेलीमीटर और अधिकतम लंबाई का उपयोग कर एक स्ट्रिंग

string = 'A string with words' 

[splitting process takes place] 

list = ('A string with','words') 

इस उदाहरण में स्ट्रिंग 'के साथ' और 'शब्द' है क्योंकि वह अंतिम स्थान पर आप इसे विभाजित कर सकते हैं और पहली है के बीच विभाजित है थोड़ा 15 अक्षर या उससे कम हो।

+2

क्या शब्द है कि 15 वर्ण से अधिक लंबे से कोई लेना देना? – SilentGhost

+0

स्ट्रिंग भारी उसे संपादित कर रहा है, तो मुझे यकीन है कि संपादक कभी नहीं 15 वर्ण – chrism

उत्तर

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

सरल और काम करता है जो मेरे सभी बक्से लगाता है! – chrism

+0

और सबसे अच्छी बात यह है कि आम तौर पर पैकेज –

1

आप शायद एक regex का उपयोग करने के लिए देख रहे हैं। पायथन re मॉड्यूल में split फ़ंक्शन है, लेकिन मुझे लगता है कि आप आसानी से मिलान करने वाले समूहों द्वारा बेहतर सेवा प्रदान करेंगे।

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

[संपादित करें] क्षमा करें, उस बिंदु को याद किया जहां आप कई हिस्सों को चाहते हैं। मैं यहां एक और जटिल रेगेक्स लगाने जा रहा था, लेकिन ऊपर उल्लिखित टेक्स्टव्रप मॉड्यूल इसके लिए बनाया गया है। यदि आप चुनते हैं तो मैं आपके लिए अभ्यास के रूप में रेगेक्स को विस्तारित कर दूंगा।

+0

मुझे यह पसंद है क्योंकि यह तोड़ नहीं करता है या 15 वर्णों से अधिक शब्द, मेरे बहुत ही सीमित परीक्षण पर आधारित खो से अधिक समय शब्दों का उपयोग करता बना सकते हैं। –

6

आप इस दो अलग अलग तरीकों कर सकते हैं:

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

नोट अंतरिक्ष से निपटने में मामूली अंतर।

+0

दोनों अच्छी संभावनाएं में पहले से ही है, लेकिन पता है कि न तो 15 वर्णों से अधिक शब्दों को संभालती है बहुत अच्छी तरह से '>>> एस = >>> textwrap 'ए supercalifragilistic शब्दों के साथ स्ट्रिंग' हो। लपेट (रों, 15) [के साथ एक स्ट्रिंग ',' upercalifragili ',' stic शब्द '] >>> re.findall (आर' \ b। {1,15} \ बी ', रों) [ 'एक स्ट्रिंग', 'शब्द'] ' –

+1

परिभाषित करें" बहुत अच्छा। " यदि आप टेक्स्ट को लपेट रहे हैं और एक शब्द आपके टर्मिनल की चौड़ाई से अधिक लंबा है, तो आप उस शब्द को अपनी टर्मिनल की चौड़ाई के टुकड़ों में विभाजित करना चाहते हैं, क्योंकि वह चौड़ाई एक कठिन सीमा है। – jemfinch

संबंधित मुद्दे