2013-09-24 7 views
5

मैं एक सरणी कि यह इतनास्प्लिट अल्फ़ान्यूमेरिक स्ट्रिंग वर्णमाला और संख्यात्मक वर्णों अलग

array[0] = "Foo" 
array[1] = "123" 
array[2] = "Bar" 
की तरह हो उसमें तरह

"Foo123Bar" 

एक अल्फ़ान्यूमेरिक स्ट्रिंग विभाजित करने के लिए एक रास्ता खोजने के लिए देख रहा हूँ युक्त

मुझे यकीन नहीं है कि इसे प्राप्त करने का सबसे अच्छा तरीका क्या है, विशेष रूप से क्योंकि जिन तारों की तुलना मैं कर रहा हूं, उनका कोई विशिष्ट पैटर्न नहीं है, जहां तक ​​पहला, वर्णमाला या संख्याएं, या कितनी बार वे दिखाई देते हैं।

"Foo123Bar" 
"123Bar" 
"Foobar123" 
"Foo123Bar2" 

मैं पता लगाने के लिए अगर वहाँ चरित्र द्वारा स्ट्रिंग चरित्र बंटवारे और अगर यह सांख्यिक है देखने के लिए जाँच की तुलना में इस अन्य करने का एक अधिक कुशल तरीका है कोशिश कर रहा हूँ: उदाहरण के लिए यह निम्न में से कोई दिखाई दे सकता है ।

+0

क्या '" Foobar123 "' का परिणाम होना चाहिए, यह होना चाहिए 'Foo',' bar' और '123' या' Foobar' और '123' – Habib

+0

'" Foobar123 "का परिणाम' "Foobar" और '123" होना चाहिए। – Nvx

उत्तर

11
string input = "Foo123Bar"; 
var array = Regex.Matches(input, @"\D+|\d+") 
       .Cast<Match>() 
       .Select(m => m.Value) 
       .ToArray(); 
+1

जो समस्या को पूरी तरह हल करता है, बहुत बहुत धन्यवाद! – Nvx

0

मुझे नहीं लगता कि आप स्ट्रिंग के प्रत्येक चरित्र की जांच करेंगे।
आप कुछ इस तरह की कोशिश कर सकते:

string[] SplitMyString(string s) 
{ 
    if(s.Length == 0) 
    return new string[0]; 

    List<string> split = new List<string>(1); 
    split.Add(""); 

    bool isNumeric = s[0] >= '0' && s[0] <= '9'; 
    foreach(char c in s) 
    { 
    bool AddString = false; 
    if(c >= '0' && c <= '9') 
    { 
     AddString = !isNumeric; 
     isNumeric = true; 
    } 
    else 
    { 
     AddString = isNumeric; 
     isNumeric = false; 
    } 
    if(AddString) 
     split.Add(c.ToString()); 
    else 
     split[split.Count-1] += c; 
    } 
    return split.ToArray(); 
} 
संबंधित मुद्दे