2011-04-19 2 views
0

Je vais avoir la chaîne suivante comme exemple:C# recherche dans une chaîne pour un modèle spécifique, et mettre dans un tableau

<tr class="row_odd"><td>08:00</td><td>08:10</td><td><a href="editactivity.php?act=11111">TEST1</a></td></tr><tr class="row_even"><td>08:10</td><td>08:15</td><td><a href="editactivity.php?act=22222">TEST2</a></td></tr><tr class="row_odd"><td>08:15</td><td>08:20</td><td><a href="editactivity.php?act=33333">TEST3</a></td></tr><tr class="row_even"><td>08:20</td><td>08:25</td><td><a href="editactivity.php?act=44444">TEST4</a></td></tr><tr class="row_odd"><td>08:25</td><td>08:30</td><td><a href="editactivity.php?act=55555">TEST5</a></td></tr> 

je dois avoir la sortie en tant que matrice unidimensionnelle. Comme 11111 = myArray (0), 22222 = myArray (1), 33333 = myArray (2), ......

J'ai déjà essayé le myString.replace, mais il semble que je ne puisse remplacer qu'un Char unique de cette façon. J'ai donc besoin d'utiliser des expressions et une boucle for pour remplir le tableau, mais puisque c'est mon premier projet C#, c'est un pont trop loin pour moi.

Merci,

+0

'String.Replace' a une surcharge qui prend deux chaînes comme arguments. Assurez-vous d'utiliser des guillemets doubles pour les littéraux de chaîne. (c'est-à-dire ") – vlad

Répondre

0

Utilisez une combinaison de IndexOf et Substring ... quelque chose comme ça fonctionnerait (pas sûr combien votre chaîne varie). Ce sera probablement plus rapide que tout Regex que vous venez avec. Bien que, en regardant la longueur de votre chaîne, ce ne soit pas vraiment un problème.

public static List<string> GetList(string data) 
    { 
     data = data.Replace("\"", ""); // get rid of annoying "'s 
     string[] S = data.Split(new string[] { "act=" }, StringSplitOptions.None); 
     var results = new List<string>(); 

     foreach (string s in S) 
     { 
      if (!s.Contains("<tr")) 
      { 
       string output = s.Substring(0, s.IndexOf(">")); 
       results.Add(output); 
      } 

     } 
     return results; 
    } 
+0

Je suis d'accord, ou vous pourriez utiliser des expressions régulières, ils sont plus simples quelques fois – Rulas

0

Plusieurs façons de procéder. Un couple est:

a) Utilise une expression régulière pour chercher ce que tu veux dans la chaîne. Utilisé un groupe nommé afin que vous puissiez accéder aux matchs directement
http://www.regular-expressions.info/dotnet.html

b) Diviser l'expression à l'endroit où vos sous-chaînes sont (par exemple divisé sur « act = »). Vous devrez faire un peu plus d'analyse pour obtenir ce que vous voulez, mais ce ne sera pas trop difficile car ce sera au début de la chaîne fractionnée (et vous avez d'autres srings qui n'ont pas votre sous-chaîne en eux)

1

Il semble que vous souhaitiez utiliser un modèle de recherche Regex. Renvoyez ensuite les correspondances (en utilisant un groupe nommé) dans un tableau.

var regex = new Regex("act=\?(<?Id>\d+)"); 
regex.Matches(input).Cast<Match>() 
    .Select(m => m.Groups["Id"]) 
    .Where(g => g.Success) 
    .Select(g => Int32.Parse(g.Value)) 
    .ToArray(); 

(PS. Je ne suis pas positif sur le modèle regex - vous devriez vérifier vous-même).

0

Divisez votre chaîne à l'aide de balises HTML telles que "<tr>","</tr>","<td>","</td>", "<a>","</a>" avec la fonction strinng-variable.split(). Cela vous donne une liste de tableau.

Split html row into string array

Questions connexes