2010-11-21 10 views
2

J'essaie de trouver une partie d'un mot de recherche dans une variable de chaîne avec une expression régulière.C# Expression régulière besoin d'aide

Voici la chaîne de contenu variable:

string s_Var = "[ Object[Key='o_Module.Id'].Text ]" 

[,], '', et. toujours là, mais pas Key =, Object et Text. (Peut être différent). Je veux déterminer la partie entre « et » comme « o_Module.Id »

Je veux seulement prendre la partie entre « et »

Pouvez-vous me aider à déterminer le modèle i besoin?

Exemple:

string s_Original_Text = "[ Object[Key='o_Module.Id'].Text ]" 

? = Je ne sais pas que la valeur peut être

[? [?? 'o_Module.?].? ]

+0

Pouvez-vous donner quelques exemples de chaînes qui doivent correspondre et les chaînes qui ne devrait pas? – Jan

+2

N'est-il pas suffisant de soustraire du premier index de '' 'et ensuite de sous-chaîne à l'index suivant de' ''? – BalusC

+0

oui c'est peut-être possible, mais avec la regex je valide aussi si la chaîne est dans le bon format –

Répondre

1

essayer ce code:

var s = "[['o_Module.Id'].Text]"; 
//"[Object[Key='o_Module.Id'].Text]"; //ALSO MATCHES THIS 
var r = new System.Text.RegularExpressions.Regex(@"(\[?.*\[?')(.*)('.*)"); 
var m = r.Match(s); 
if (m.Success) 
{ 
    //0 contains whole string 
    Console.WriteLine(m.Groups[2].Value); //Prints o_Module.Id 
} 
+0

Est-ce que j'ai besoin! !! –

+0

mais s'il vous plaît faites le tester sur beaucoup de chaîne d'échantillon pour voir si cela aide vraiment à valider le format autrement comme @Ed a suggéré que vous pouvez simplement prendre la sous-chaîne de la chaîne sujet – TheVillageIdiot

+0

Faites attention si vous utilisez l'expression régulière pour Assurez-vous que les données sont dans la bonne structure L'expression ci-dessus n'attraperait pas les données avec des guillemets ou des parenthèses errants tels que: [Object [Key = 'o_Module.Id.Text'] ou [Object [Key = 'o_Module.Id]. Texte' ] – C8H10N4O2

3

Si les guillemets simples sont toujours présents dans le formulaire que vous avez montré ci-dessus, pourquoi ne pas simplement chercher le premier index de 'en utilisant SubString? D'après ce que je vois dans votre description, utiliser des expressions régulières ici est exagéré.

0

Je pense que cela devrait normalement le faire, en supposant qu'il n'y a que jamais un jeu de guillemets simples:

System.Text.RegularExpressions.Match result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", "'([^']*)'"); 

Si vous voulez ajouter ce genre de choses option:

result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", @"\[ (?:Object)?\[(?:Key=)?'([^']*)'\]\.(?:Text)? \]"); 
0
\[[^']*?'([^']+) 

La valeur o_Module.id serait dans le premier groupe de capture.