2009-10-06 8 views
0

J'essaie de vérifier une chaîne, puis d'extraire toutes les variables qui commence par @. Je ne trouve pas l'expression régulière appropriée pour vérifier la chaîne. La chaîne peut commencer par @ ou " et si elle a commencé avec ", elle devrait avoir une paire correspondante ".Regex pour vérifier une chaîne

Exemple 1:

"ip : "[email protected]+"."[email protected]+"."[email protected]+"."[email protected] 

Exemple 2:

@nameParameter "@yahoo.com" 

Merci

+1

c'est une sorte de pas clair - qu'est-ce que vous essayez d'extraire? Pour chacun de vos exemples, vous devriez énumérer ce que vous voulez dans votre tableau de résultats –

+0

Je pense qu'il veut tous les @ sauf quand à l'intérieur d'une chaîne entre guillemets –

+0

vous commencez à chercher des "paires", vous pouvez commencer à penser à autre chose qu'une regex. Non qu'il soit impossible de faire fonctionner l'expression; juste que ça finira probablement par avoir plus de problèmes que ça ne le vaut. –

Répondre

1

Il serait probablement plus facile d'abord diviser la chaîne sur chaque chaîne entre guillemets, puis vérifiez les non cotées pièces pour @ 's. Par exemple toutes les chaînes entre guillemets pourraient être: /"[^"]*"/, en appelant Regex.Split sur votre chaîne renverrait un tableau de chaînes des parties non-quotées, que vous pourriez utiliser ensuite l'expression /@\w+/ pour trouver des @.

+0

J'ai essayé de diviser la chaîne avec /" [^ "] *"/mais cela n'a pas fonctionné !!! System.Text.RegularExpressions.Regex reg = nouveau System.Text.RegularExpressions.Regex (@ "/" "[^" "] * /" ""); chaîne [] consts = reg.Split (valueToCheck); – Asha

+0

Que voulez-vous dire par cela n'a pas fonctionné? Je suis désolé. –

+0

c'était une erreur de syntaxe J'aurais dû changer quelque chose. Mais merci pour la suggestion de split. – Asha

0

Essayez ceci:


string text = "@nameParameter \"@yahoo.com\""; 
Regex variables = new Regex(@"(?<!"")@\w+", RegexOptions.Compiled); 
foreach (Match match in variables.Matches(text)) 
{ 
    Console.WriteLine(match.Value); 
} 
0

Pour vérifier les chaînes que vous avez fournis dans votre message:

(^ ("[^" \ r \ n] « \ s + @ [\ w.] + \ s * +?) +) | (((@ @ [\ w.] +) | ("@ [\ w.] +")) \ s *) +

Questions connexes