Question

J'ai un tableau de chaînes et les valeurs sont les suivantes

sNames[0] = "Root | [<root>] | [ID = 1]";
sNames[1] = "Planning | [Root] | [ID = 2]";

De cela, je voudrais juste extraire la valeur de l'ID .. 1,2 ..

pour le moment je fais ceci comme:

foreach (var s in sNames)
{
  int id = Convert.ToInt32(s.Split('|')[2].Split('=')[1].Substring(1,1));
  ...
}

Y a-t-il un autre bon moyen de le faire?

Merci

Était-ce utile?

La solution

Vous pouvez utiliser une expression rationnelle pour trouver l'ID (la partie Match () peut ne pas être correcte à 100% - l'exercice est laissée au lecteur).

var regex = new Regex(@"\[ID = (?<id>[0-9]+)\]");
var ids = sNames.Select(s => Convert.ToInt32(regex.Match(s).Groups["id"].Value));

Autres conseils

Vous pouvez utiliser regex ...

// using System.Text.RegularExpressions
Regex rx = new Regex(@"\[ID\s*=\s*(\d+)\]", RegexOptions.IgnoreCase);
foreach (var s in sNames)
{
  Match m = rx.Match(s);
  if (!m.Success) continue; // Couldn't find ID.
  int id = Convert.ToInt32(m.Groups[1].ToString());
  // ...
}

Mais vous avez maintenant deux problèmes . ; -)

Cela ressemble à un travail pour les expressions régulières. Cela fera correspondre toutes les chaînes avec le motif "ID = [un certain nombre]"

.
using System.Text.RegularExpressions;
...

foreach(string s in sNames) {
  Match m = Regex.Match("ID = ([0-9]+)");
  if(m.Success) {
    int id = Convert.ToInt32(m.Groups[1]);
  }
}

Les expressions régulières sont les "plus faciles". Bien sûr, il y a une énorme courbe d'apprentissage pour regex.

Regex rx = new Regex(@"\[ID\s*=\s*(?<id>\d+)\]");
Match m = rx.Match(str);
string id = m.Groups["id"].Value;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top