2010-04-27 7 views
2

Ceci est la chaîne d'entrée: 23x^45*y or 2x^2 or y^4*x^3. Je corresponds ^[0-9]+ après la lettre x. En d'autres termes, je suis correspondant à x suivi de ^ suivi de chiffres. Le problème est que je ne sais pas que je suis correspondant x, il pourrait être n'importe quelle lettre que j'ai stocké comme variable dans mon tableau char.Comment utiliser les variables avec regex?

Par exemple:

foreach (char cEle in myarray) // cEle is letter in char array x, y, z, ... 
{ 
    match CEle in regex(input) //PSEUDOCODE 
} 

Je suis nouveau et je regex de nouveau que cela peut être fait si je définir des variables regex, mais je ne sais pas comment.

+0

Merci dtb pour le formatage! :) – Nayan

Répondre

3

Vous pouvez utiliser le modèle @"[cEle]\^\d+" que vous pouvez créer de façon dynamique à partir de votre tableau de caractères:

string s = "23x^45*y or 2x^2 or y^4*x^3"; 
char[] letters = { 'e', 'x', 'L' }; 
string regex = string.Format(@"[{0}]\^\d+", 
    Regex.Escape(new string(letters))); 
foreach (Match match in Regex.Matches(s, regex)) 
    Console.WriteLine(match); 

Résultat:

x^45 
x^2 
x^3 

Quelques choses à noter:

  • Il est nécessaire d'échapper à la ^ à l'intérieur de l'expression régulière sinon il a un moi spécial "début de ligne".
  • Il est judicieux d'utiliser Regex.Escape lors de l'insertion de chaînes littérales d'un utilisateur dans une expression régulière, afin d'éviter que les caractères qu'elles tapent soient mal interprétés en tant que caractères spéciaux.
  • Ceci correspondra également au x de la fin des variables avec des noms plus longs comme tax^2. Cela peut être évité en exigeant une limite de mot (\b).
  • Si vous écrivez x^1 comme alors cette expression régulière ne correspondra pas. Cela peut être corrigé en utilisant (\^\d+)?.
+0

thx, maintenant je sais – dontoo

+0

Oui, la limite de mot est importante. +1 :) – Nayan

0

Essayez d'utiliser ce modèle pour capturer le nombre, mais à l'exclusion du x^préfixe:

(?<=x\^)[0-9]+

string strInput = "23x^45*y or 2x^2 or y^4*x^3"; 
foreach (Match match in Regex.Matches(strInput, @"(?<=x\^)[0-9]+")) 
    Console.WriteLine(match); 

Cela devrait imprimer:

45 
2 
3 

Ne pas oublier d'utiliser le option IgnoreCase pour l'association, si nécessaire.

+0

Je n'étais pas clair dans ma question, je veux capturer^mais je ne sais pas comment utiliser la variable comme mon motif – dontoo

Questions connexes