2013-04-29 3 views
5

मैं एक स्ट्रिंग को उन पदों पर कई सबस्ट्रिंग्स में विभाजित करना चाहता हूं जहां एक या अधिक सफेद स्थान (टैब, स्थान, ...) होते हैं। In the documentation of strsplit() यह कहता है, कि विभाजन को नियमित अभिव्यक्ति के रूप में व्याख्या किया जाता है।एक या अधिक सफेद जगहों पर सबस्ट्रिंग्स में स्ट्रिंग स्प्लिट

test = "123 nnn  dddddd" 
strsplit(test, "[:space:]+") 

यह केवल लौटे:

[[1]] 
[1] "123 nnn  dddddd" 

लेकिन लौटना चाहिए:

[[1]] 
[1] "123" "nnn" "dddddd" 

क्या गलत मेरी कोड में

इस प्रकार मैं निम्नलिखित है, जो काम नहीं किया की कोशिश की?

+1

इसके बजाए इसे आजमाएं: 'strsplit (test, "[] +") ' –

+0

वास्तव में' strsplit (test," + ") 'काम करता है। – plannapus

उत्तर

9

strsplit(test, '\\s+') 
[[1]] 
[1] "123" "nnn" "dddddd" 

\\s सभी खाली स्थान के पात्रों से मेल खाएगी की कोशिश करो।

+0

का महान उदाहरण मेरी इच्छा है कि मैंने अपनी टिप्पणी अब उत्तर के रूप में रखी है !! :) –

7

[:space:] इसे काम करने के लिए एक वर्ण वर्ग [] के अंदर रखा जाना चाहिए, यानी [[:space:]][:space:] अपने स्वयं के संस्करण पर एक वर्ण वर्ग के रूप में व्याख्या किया जाएगा जिसमें :, s, p, a, c, e शामिल हैं।

strsplit(test, "[[:space:]]+") 

ध्यान दें कि डिफ़ॉल्ट रूप से strsplit POSIX ERE, जिसमें [:space:] की स्थान पर निर्भर व्याख्या परिणाम का प्रयोग करेंगे।

PCRE (पर्ल कम्पैटिबल नियमित अभिव्यक्ति) में, [:space:]स्थान-स्वतंत्र है और \p{Xps} के बराबर है। इसलिए, यदि आप विभिन्न स्थानों पर लगातार व्यवहार करना चाहते हैं तो आप perl ध्वज सक्षम करना चाहेंगे।

आप केवल सभी रिक्त स्थान (ASCII 32) पतन और क्षैतिज टैब \t और नए लाइन वर्ण \n अकेले छोड़ना चाहते हैं चाहते हैं, या आप मान सकते हैं कि टेक्स्ट स्पेसिंग चरित्र के रूप में केवल अंतरिक्ष (ASCII 32) शामिल हैं:

strsplit(test, " +") 
+0

एक स्पष्ट उत्तर –

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