2013-09-24 3 views
5

Sto cercando di trovare un modo per dividere una stringa alfanumerica comeSplit stringa alfanumerica a matrice contenente l'alfabeto e caratteri numerici separatamente

"Foo123Bar" 

in un array che lo contiene in questo modo

array[0] = "Foo" 
array[1] = "123" 
array[2] = "Bar" 

Non sono sicuro di quale sia il modo migliore per ottenerlo, soprattutto perché le stringhe che sto confrontando non seguono uno schema specifico per quanto riguarda prima, l'alfabeto o i numeri, o quante volte ciascuna di esse appare. Per esempio si potrebbe apparire come una delle seguenti:

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

Sto cercando di scoprire se c'è un modo più efficiente di fare questo diverso dividere la stringa di caratteri per carattere e controllo per vedere se è numerico .

+0

quello che dovrebbe essere il risultato di ' "Foobar123"', dovrebbe essere 'foo',' '123' bar' e o' '123' Foobar' e – Habib

+0

Il risultato di "" Foobar123 "' dovrebbe essere "" Foobar "' e '" 123 "'. – Nvx

risposta

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

Questo risolve il problema perfettamente, grazie mille! – Nvx

0

Non penso che riuscirai a controllare ogni carattere della stringa.
Si potrebbe provare qualcosa di simile:

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(); 
} 
Problemi correlati