2013-06-12 3 views
2

Je chaîneRegex prendre des valeurs basées sur plusieurs contrôles

string s="someMethod(999,'xyz')" 

et je veux prendre 999 et xyz pour tableau. ce qui pourrait être la meilleure façon possible au lieu de le diviser par '(' première et par '' puis par '\' »

+4

Avez-vous essayé quelque chose? – Default

+0

s.Split ('(') suivi de x = s [1] .Split (',') suivi de y = x [1] .Split ('\' ') suivi de y [1] .Split (' \ " – hungrycoder

+1

Vous devriez ajouter cela à votre question et indiquer pourquoi cela n'a pas fonctionné .. – Default

Répondre

2

Vous n'avez pas besoin d'utiliser regex pour cela.

Vous pouvez utiliser les méthodes String.Substring, String.IndexOf et String.Split comme;

string s = "someMethod(999,'xyz')"; 
string BetweenBrackets = s.Substring(s.IndexOf("(") + 1, s.IndexOf(")") - s.IndexOf("(") - 1); 
string[] array = BetweenBrackets.Split(new char[] { ',', '\'' }, StringSplitOptions.RemoveEmptyEntries); 
Console.WriteLine(array[0]); //999 
Console.WriteLine(array[1]); //xyz 

Voici un DEMO.

+0

en utilisant le [surcharge] (http://msdn.microsoft.com/en-us/library/ms131448.aspx) et en spécifiant' StringSplitOptions.RemoveEmptyEntries', vous seriez en mesure d'utiliser 'array [0]' et 'array [1]' À la place, pour moi, c'est plus intuitif que d'utiliser 'array [2]' – Default

+0

@Default Bon appel. –

0

Essayez cette regex:

^.+?\((.+?),'(.+?)'\)$ 

1 $: 999, $ 2: xyz

code complet:

Regex r = new Regex(@"^.+?\((.+?),'(.+?)'\)$"); 
string[] parameters = new string[2]; 
parameters[0]=r.Match(s).Groups[1].Value; 
parameters[1]=r.Match(s).Groups[2].Value; 

Si vous n'êtes pas sûr qu'il y aura des guillemets simples, utilisez '? inst ead de '

+0

jerry les valeurs 999, xyz ne sont pas statiques.Je veux juste capturer les paramètres de méthode de" someMethod "dans deux variables – hungrycoder

+1

Je sais ils ne sont pas statiques.Je veux dire que $ 1 aura 999 et $ 2 aura xyz – Jerry

+0

Jerry a raison, ça marche.J'ai un doute à mon avis, ne sera pas une regex comme "\\ ((. +), '(. +) "faire le même travail? – JoseTeixeira

Questions connexes