2011-04-05 4 views
0

J'ai la chaîne suivante, et je suis en train d'extraire uniquement le contenu dans le FUNC():Comment regex C# string

FUNC (strToExtract)

Je vais avoir du mal à extraire à l'aide Regex.Replace()

aide Kind serait apprécié

grâce

Répondre

1

Salut vous pouvez essayer quelque chose comme ceci:

Regex regexp = new Regex(@"FUNC((.*))", RegexOptions.IgnoreCase); 
MatchCollection matches = regexp.Matches(inputString); 
Match m = matches[0]; 
Group g = m.Groups[0]; 

Edit: supprimé l'échappé() dans @ "FUNC (. (*))"

+0

N'a pas fonctionné. J'ai réussi à faire egex.Replace ("FUNC (foaksdokfakosdfko)", @ "FUNC \ ((. *) \)", "$ 1") – Himberjack

+1

Désolé, je n'ai pas testé. Et je pensais que vous devriez échapper à la() de la méthode FUNC. Heureux que vous trouviez la solution;) – Wavyx

+0

Je ne pense pas que cela fonctionnera pour les 2 raisons suivantes: 1) les parenthèses devraient être échappées de manière appropriée, 2) le crochet de fermeture sera égalé par '. *' Parce que l'appariement est gourmand et donc le support à la fin n'est jamais égalé. EDIT: peut-être que les crochets n'ont pas besoin d'être échappés lorsque vous utilisez @ .. juste deviner – Bazzz

2

si vous connaissez la chaîne commence toujours par "FUNC (" et se termine par ")", puis non en utilisant une expression régulière est beaucoup moins cher:

string myString = "FUNC(strToExtract)"; 
string startsWith = "FUNC("; 
string endsWith = ")"; 
if (myString.StartsWith(startsWith) && myString.EndsWith(endsWith)) 
{ 
    string extracted = myString.Substring(startsWith.Length, myString.Length - endsWith.Length - startsWith.Length); 
} 
+0

+1 Pour supprimer le 2ème problème;) – juharr

0

Essayez ceci:

string input = "Func(params)"; 
string pattern = @"\w+\((.+?)\)"; 
Match m = Regex.Match(input, pattern); 
string result = m.Groups[1].Value; 
Console.WriteLine(result); 

Les parenthèses doivent être échappés, sinon ils seront interprétés comme un groupe regex. Le .+? correspondra à au moins un caractère et n'est pas gourmand, donc il ne correspondra pas plus que nécessaire si plusieurs correspondances existent dans la même entrée. L'utilisation de \w+ rend le modèle suffisamment flexible pour gérer différents noms de fonctions, pas seulement "Func".