2012-11-03 6 views
47

पर आधारित पायथन स्प्लिट स्ट्रिंग ऊपरी केस शब्दों (पायथन में) द्वारा "HELLO there HOW are YOU" जैसे स्ट्रिंग को विभाजित करने का सबसे अच्छा तरीका क्या है?रीजिक्स

तो मैं इस तरह की तरह एक सरणी को रखना होगा: results = ['HELLO there', 'HOW are', 'YOU']


संपादित करें:

मैं कोशिश की है:

p = re.compile("\b[A-Z]{2,}\b") 
print p.split(page_text) 

यह काम करने के लिए प्रतीत नहीं होता है, हालांकि ।

+2

[आपने क्या प्रयास किया है] (http://www.whathaveyoutried.com)? - आपको ['' re.split() ''] (http://docs.python.org/3/library/re.html#re.split) नहीं मिला? –

+1

जब आप कहते हैं कि कुछ काम नहीं करता है, तो आपको समझाया जाना चाहिए क्यों। क्या आपको अपवाद मिलता है? (यदि हां, तो संपूर्ण अपवाद पोस्ट करें) क्या आपको गलत आउटपुट मिलता है? –

उत्तर

55

मेरा सुझाव है

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s) 

चेक this demo

7

आप विभाजन की आवश्यकता नहीं है, बल्कि findall:

re.split(r'[ ](?=[A-Z]+\b)', input) 

यह हर जगह है कि ऊपरी के एक स्ट्रिंग द्वारा पीछा किया जाता है पर बंट जाएगा:

re.findall(r'[A-Z]+[^A-Z]*', str) 
+2

वह लगातार ऊपरी-केस अक्षरों में विभाजित होता है जो ऊपरी-केस शब्द नहीं हैं –

+2

@ m.buettner: मुझे नहीं पता कि "शब्द" से आपका क्या मतलब है। – georg

+0

उसका उदाहरण देखें। एक शब्द जो पूरी तरह से अपरकेस है। और मैं शब्द ले जाऊंगा, जो कुछ (रेगेक्स) शब्द सीमाओं के बीच है। आपका 'कुछ' और 'थिंग' –

25

आप एक अग्रदर्शी इस्तेमाल कर सकते हैं केस अक्षर जो शब्द-सीमा में समाप्त होते हैं।

ध्यान दें कि वर्ग ब्रैकेट केवल पठनीयता के लिए हैं और साथ ही छोड़े जा सकते हैं।

यदि यह पर्याप्त है कि एक शब्द के पहले अक्षर अक्षर बड़े हैं (इसलिए यदि आप Hello रूप में अच्छी तरह के सामने विभाजित करना चाहते हैं) यह और भी आसान हो जाता है:

re.split(r'[ ](?=[A-Z])', input) 

अब इस पर हर विभाजन अंतरिक्ष के बाद किसी भी ऊपरी मामले पत्र।

+1

मैं 're.split (r' कैसे बदलूं [ ] (? = [एजेड] + \ बी) ', इनपुट)' तो इसे ऊपरी केस अक्षर नहीं मिला? जैसे यह "ए" से मेल नहीं खाएगा? मैंने 're.split (आर '[] (? = [ए-जेड] {2,} + \ बी)', इनपुट) 'की कोशिश की। धन्यवाद! –

+0

@JamesEggers आपका मतलब है कि आप कम से कम दो ऊपरी-केस अक्षरों की आवश्यकता चाहते हैं, ताकि आप 'I' जैसे शब्दों पर विभाजित न हों? 're.split (आर '[] (? = [ए-जेड] {2,} \ बी)', इनपुट) 'इसे करना चाहिए। –

+2

मैं थोड़ा और मामलों को पकड़ने के लिए कम से कम '[] +' या शायद \ \ W + 'का सुझाव दूंगा। फिर भी, एक अच्छा जवाब है। – georg

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