2009-10-26 2 views
0

J'ai une question sur les expressions régulières .NET.expression régulière .NET trouver le numéro et le groupe le numéro

Maintenant, j'ai plusieurs chaînes dans une liste, il peut y avoir un certain nombre dans la chaîne, et la partie reste de la chaîne est la même, tout comme

string[] strings = {"var1", "var2", "var3", "array[0]", "array[1]", "array[2]"} 

Je veux que le résultat est {"var$i" , "array[$i]"}, et je un record du nombre qui enregistrent le nombre correspond, comme un dictionnaire

var$i {1,2,3} & 
array[$i] {0, 1 ,2} 

Je défini une expression régulière comme celui-ci

var numberReg = new Regex(@".*(<number>\d+).*"); 
foreach(string str in strings){ 
    var matchResult = numberReg.Match(name); 
    if(matchResult.success){ 
    var number = matchResult.Groups["number"].ToString(); 
    //blablabla 

Mais l'expression rationnelle ici semble ne pas fonctionner (jamais correspondre au succès), je suis nouveau chez regex, et je veux résoudre ce problème dès que possible.

+0

BTW, il n'existe pas d'expression régulière C#. C# est le langage de programmation. Le framework est .NET, qui a des expressions régulières. –

+0

Vous devriez jeter un coup d'œil au «Régulateur», un excellent outil pour apprendre à écrire des expressions régulières et faciliter la création de vos expressions. –

Répondre

1

Essayez comme votre regex:

(?<number>\d+) 
1

Il est clair pour moi ce que vous voulez exactement. Cependant en regardant dans votre code, je suppose que vous devez en quelque sorte extraire les nombres (et peut-être les noms de variables) de votre liste de valeurs. Essayez ceci:

// values 
string[] myStrings = { "var1", "var2", "var3", "array[0]", "array[1]", "array[2]" }; 

// matches 
Regex x = new Regex(@"(?<pre>\w*)(?<number>\d+)(?<post>\w*)"); 
MatchCollection matches = x.Matches(String.Join(",", myStrings)); 

// get the numbers 
foreach (Match m in matches) 
{ 
    string number = m.Groups["number"].Value;     
    ... 
} 
Questions connexes