2010-10-24 2 views
0

Comment les séparer en une série d'éléments, par exemple array [0] = "ABC", array [ 1] = "YXYZ", array [2] = "" array [3] = "123" ...Tokenization de chaînes/Regex Stack/File d'attente Problème - "ABC [YXYZ] [123] SomeText More Text [Split]"

Gurus d'expression régulière! Aidez-moi! Ne vous préoccupez pas de la performance, seule la codéité du code, c'est-à-dire un code illisible astucieux, est tout à fait acceptable.

CREDIT EXTRA:

Je veux vraiment faire ça -> tout [] doit essentiellement formaté d'une manière spécifique. Le bémol est que je ne peux pas faire un regex remplacer, donc je dois mettre dans une collection, et en quelque sorte marquer que je suis en mode texte ou mode de décoration. Je pense que je vais mettre tout cela dans une file d'attente ou une pile, et mettre un null dans la pile pour identifier le marquage du texte brut par rapport aux régions de décoration.

des idées?

+0

En fait, array [1] = "[YXYZ]" est probablement plus utile ... mais sans lui aussi est OK. – user485429

+0

"EXTRA CREDIT"? et une étoile d'or? –

+2

Donc, vous voulez essentiellement diviser sur les espaces? Ce serait aussi simple que 's.Split ('')'. –

Répondre

0

Avez-vous besoin d'utiliser regex pour cela?

Utilisation de la fonction split chaîne:

 Dictionary <string, bool> theDict = new Dictionary<string,bool>(); 
     string input= @"abc [xyz] [123] asdasd"; 
     string[] a2; 
     string[] a1 = input.Split('['); 
     for (int i = 0; i< a1.Length; i++) 
     { 
      a2 = a1[i].Split(']'); 
      if (a2.Length == 1) 
       theDict.Add(a2[0], false); // no special formatting 
      else 
      { 
       theDict.Add(a2[0], true); // special formatting 

       theDict.Add(a2[1], false); 
      } 
     } 

vous obtiendrez le résultat que vous demandez.