2010-04-23 5 views
2

J'ai un peu de problème avec regex (C#, ASP.NET), et je suis sûr que je fais quelque chose de fondamentalement faux. Ma tâche consiste à lier un gridview créé dynamiquement à une source de données, puis à parcourir une colonne dans la grille, en recherchant la chaîne "A & I". Un exemple de ce que les données dans la cellule (dans la colonne de modèle) ressemble est:Problème avec l'expression régulière et Ampersand

Name: John Doe 
Phone: 555-123-1234 
Email: [email protected] 
Dept: DHS-A&I-MRB 

Voici le code que je utilise pour trouver la valeur de chaîne:

foreach(GridViewRow gvrow in gv.Rows) 
{ 
    Match m = Regex.Match(gvrow.Cells[6].Text,"A&I"); 

    if(m.Success) 
    { 
     gvrow.ForeColor = System.Drawing.Color.Red; 
    } 
} 

Je ne suis pas avoir un peu de chance avec l'une de ces variations: "A & I" "[A] [&] [I]"

Mais quand je strictement utilisateur "&", la ligne ne tourne rouge. Aucune suggestion?

Merci, Dan

Répondre

4

Le Regex me semble bien. Je soupçonne que le texte à peut-être être codé comme:

A&I 

sur l'entrée. Vous pouvez également faire gvrow.Cells[6].Text.Contains("A&I") au lieu de regex. Ou gvrow.Cells[6].Text.Contains("A&I") si j'ai raison avec le problème d'encodage.

chaîne.Contains est également plus rapide que Regex.

Vous pouvez également HttpUtility.HtmlDecode sur le texte avant de vérifier l'occurance A & I.

+0

Merci pour la suggestion. J'ai utilisé "A & I" et cela a fonctionné. Aussi, merci pour la suggestion "contient" - je ne savais pas à ce sujet jusqu'à ce que vous me le disiez! –

1

Ces deux match de succès:

Match m = Regex.Match("DHS-A&I-MRB", "A&I"); 
Match m0 = Regex.Match("DHS-A&I-MRB", @"A\&I"); 

Debug.WriteLine("m.Success = " + m.Success.ToString()); 
Debug.WriteLine("m0.Success = " + m0.Success.ToString()); 

Sortie:

m.Success = True 
m0.Success = True 

Peut-être que le problème est ailleurs (peut-être le mauvais indice des cellules)?

+0

je cet exemple précis, et qui a été testé vrai. Cependant, lors du test de la sortie gridview, ils échoueraient. Je pense que le problème est l'encodage - je viens de tester "A & I" et cela a fonctionné. (En passant, je me suis rendu coupable du mauvais index de colonne avant ... donc j'ai vérifié quadruple avant de poster ici;) Merci pour la suggestion, cependant.) –

Questions connexes