2011-07-10 2 views
0
"<div class=\"standings-rank\">([0-9]{1,2})</div>" 

Voici ma regex. Je veux correspondre mais C# me retourne quelque chose commeProblème de regex C#

"<div class=\"standings-rank\">1</div>" 

Quand je voudrais simplement obtenir

"1" 

Comment puis-je faire C# me retourner la bonne chose?

Répondre

3

Utilisez l'indexeur Match.Groups[int].

Regex regex = new Regex("<div class=\"standings-rank\">([0-9]{1,2})</div>"); 
string str = "<div class=\"standings-rank\">1</div>"; 
string value = regex.Match(str).Groups[1].Value; 

Console.WriteLine(value); // Writes "1" 
+0

Excellente réponse! – SBSTP

2

En supposant que vous avez un Regex déclaré comme suit:

Regex pattern = new Regex("<div class=\"standings-rank\">([0-9]{1,2})</div>"); 

et sont à tester ladite regex via la méthode Match; alors vous devez accéder au match à partir de l'index 1 et non de l'index 0;

pattern.Match("<div class=\"standings-rank\">1</div>").Groups[1].Value 

Cela retournera la valeur attendue; l'index 0 renverra toute la chaîne correspondante.

Plus précisément, voir MSDN

La collection contient un ou plusieurs System.Text.RegularExpressions.Group objets. Si la correspondance est réussie, le premier élément de la collection contient l'objet Groupe correspondant à la correspondance entière. Chaque élément suivant représente un groupe capturé , si l'expression comprend des groupes de capture. Si le match échoue, la collection contient un seul System.Text.RegularExpressions.Group objet dont la propriété est faux succès et dont la propriété est égale à la valeur String.Empty.