python - splitting strings using re.split -
मेरे पास फ़ॉर्म के कई स्ट्रिंग्स (> 1000) हैं:
\ r \ n सेंसर सिसिग \ n अध्यक्ष \ n कुटीर \ n कम ग्रीन साइक्लो \ n सँगचॉन \ n पहियों पर सीओल \ n कैसा भारतीय \ n \ n आनंद ले जाना \ n वाम आउट! \ N लिबा फलाफ़ेल \ n मिर्च पनीर बैंडिट \ r \ n
'\ N'
से पहले स्ट्रिंग्स का एक रिक्त स्थान हो सकता है। मैं इन तारों को कैसे एक अलग तरीके से विभाजित कर सकता हूं ताकि किसी भी रिक्त या डुप्लिकेट (व्हाट्सपेस केस) तत्वों से बचें?
मैं उपयोग कर रहा था:
re.split (r '\ r | \ n', str)
संपादित करें: कुछ अधिक उदाहरण:
\ r \ n क्रेम ब्रूली कार्ट \ r \ n अब क्रि अप करें \ r \ nKoJa रसोई \ r \ n जाओ पर \ r \ n विशिष्ट पुश \ r \ nEbbett का अच्छा चलना \ R \ n फ़िट्टेन बर्गर \ r \ n जाओ सफ़ाई \ r \ n हियाया \ r \ n एएसजेजे \ r \ n केंडर्स ट्रक \ r \ n ब्लू सैगोन \ r \ r \ n अध्यक्ष \ r \ n सँगचॉन \ r \ n पहियों पर सील \ r \ आर \ n स्ट्रीट कुत्ता ट्रक \ r \ n कींडर्स ट्रक \ r \ n यम्मी बीबीक्यू \ n लॅक्सियों का जमे हुए कस्टर्ड \ r \ n ड्रास्की की हॉट रॉड रसोई \ r \ n एक गो \ n पनीर वन्य चला गया \ n कपके \ n अब करी अप करें \ n खोखले पर पिन \ n KoJa रसोई \ n Lobsta ट्रक \ n Oui शेफ \ n Sanguchon \ N Senor Sisig \ n अध्यक्ष \ n रिब सचेतक धन्यवाद! < / Div>
आपका उदाहरण किसी भी "सफेद स्थान को \ n
से पहले नहीं दिखाता है" केवल एक वैकल्पिक \ r
।
यदि आप सभी को संभाल करने की कोशिश कर रहे हैं, तो या तो \ r
या \ n , विभाजन यह एक संभावित \ r
पर और एक निश्चित \ n
:
re.split (r "\ r? \ N", s )
बेशक, यह मानते हुए कि आपके पास कोई भी \ r
बिना \ n
को संभालना है यदि आपको \ r
, \ r \ n
, और \ n
सभी को समान रूप से संभालना है (पायथन की सार्वभौमिक न्यूलाइन समर्थन के समान) ...: / P>
re.split (r "\ r | \ n | (\ r \ n)", s)
या, अधिक बस:
re.split (r "(\ r \ n) +", s)
यदि आप प्रमुख स्थान, टैब, एकाधिक \ R \ / code>, आदि, आप ऐसा कर सकते हैं regexp में, या बस प्रत्येक परिणाम पर lstrip
कॉल करें:
मैप (str.lstrip, फिर .split (r "\ r | \ n", s))
... लेकिन यह आपको खाली तत्वों के साथ छोड़ सकता है आप उन लोगों को फ़िल्टर कर सकते हैं, लेकिन यह संभवतः बेहतर है कि किसी भी व्हाट्सएप के किसी भी भाग को विभाजित करें जो कि \ n
के साथ समाप्त होता है:
re.split (r " S * \ n ", s)
यह अभी भी शुरू और अंत में खाली तत्वों को छोड़ देगा, क्योंकि आपकी स्ट्रिंग नई लाइनों के साथ शुरू होती है और समाप्त होती है, और यही re.split < / कोड> करना चाहिए यदि आप उन्हें समाप्त करना चाहते हैं, तो आप या तो स्ट्रिप
पार्स करने से पहले स्ट्रिंग कर सकते हैं या पार्स करने के बाद अंतिम मानों को टॉस कर सकते हैं:
re.split (r "\ s * \ N ", s.strip ()) re.split (r" \ s * \ n ", s) [1: -1]
मुझे लगता है कि इन पिछले दो में से एक है वास्तव में आप क्या चाहते हैं ... लेकिन यह आपके द्वारा दी गई सीमित जानकारी के आधार पर वास्तव में एक अनुमान है। यदि नहीं, तो दूसरों में से एक (इसके विवरण के साथ) उम्मीद है कि आप वास्तव में क्या चाहते हैं, यह लिखने के लिए पर्याप्त होगा।
अपने नए उदाहरणों से, ऐसा लगता है कि आप वास्तव में क्या चाहते हैं पर विभाजित सफेद स्थान का कोई भी भाग है जिसमें कम से कम एक \ n
शामिल है और आपका इनपुट शुरू या अंत में न्यूलाइन नहीं हो सकता है या नहीं (आपका पहला उदाहरण है, आपका दूसरा \ r \ n
शुरू में है लेकिन अंत में कुछ नहीं ...), और आप चाहते हैं अगर यह करता है तो उन्हें अनदेखा करें इसलिए:
re.split (r "\ s * \ n \ s *", s.strip ())
हालांकि, इस बिंदु पर, यह पूछने योग्य हो सकता है कि आप इसे पाठ फ़ाइल के बजाय स्ट्रिंग के रूप में पार्स करने की कोशिश क्यों कर रहे हैं। मान लें कि आपको कुछ फ़ाइल या फाइल की तरह ऑब्जेक्ट से इसे मिला है: इसके बजाय:
खुले (पथ, 'आर') के साथ f: s = f.read () परिणाम = पुनः विभाजन (regexpr, s.strip ())
... ऐसा कुछ बहुत अधिक पठनीय है, और तेज़ पर्याप्त से अधिक हो सकता है (संभवतः इष्टतम रेगेक्सपी के रूप में तेज़ी से नहीं, लेकिन अभी भी तेज़ है कि किसी भी बर्बाद स्ट्रिंग प्रसंस्करण समय को वास्तविक फ़ाइल रीडिंग टाइम द्वारा वैसे ही सँभाला जाता है):
खुले (पथ, 'आर') के साथ f: results = filter (कोई नहीं, नक्शा (str विशेष रूप से यदि आप इस सूची में एक बार फिर से दोहराते रहना चाहते हैं, तो उस स्थिति में (या तो पायथन 3.x मानिए, या ifilter
का उपयोग करके। और imap
से itertools
अगर 2.x) इस संस्करण को पूरी फ़ाइल को मेमोरी में पढ़ना पड़ता है और इससे पहले कि आप अपना वास्तविक कार्य करना शुरू कर दें।
Comments
Post a Comment