Mon entrée est:
Regex.Replace(line, "Foo (\d+?);", "NUM");
Je veux remplacer
Foo (\ d +?); à Foo NUM;
En résultat, ce sera:
Foo NUM; Foo NUM; Foo NUM;
Mon modèle est:
Foo 12; Foo 5534; Foo 1;
Mais cela ne semble pas fonctionner. Quel est le problème?
3 Réponses :
Dans votre code, vous correspondez à Foo (\ d +?); et remplacez cette correspondance par NUM qui sera le résultat littéral. Mais ce que vous voulez garder dans le remplacement, ce ne sont pas les chiffres mais FOO
Vous pouvez faire le remplacement dans l'inverse en utilisant un groupe de capture pour Foo et en utilisant ce groupe de capture dans le remplacement.
Regex.Replace(line, @"(Foo) \d+;", "$1 NUM;")
Vous pouvez omettre de rendre le \ d + non gourmand en utilisant le point d'interrogation.
vient d'ajouter ceci (Foo) \\ s * \\ d +; donc nous n'avons pas besoin de définir l'espace manuellement, je pense
utilisez cette expression régulière:
Regex.Replace(line, @"Foo (\d+?);", "NUM;");
vous avez simplement besoin de @ avant l'expression régulière.
Vous pouvez tester ici vos expressions régulières:
Solution sans regex
Si votre dernier mot est toujours nombre et que vous souhaitez le remplacer par "NUM", alors vous pouvez le faire quelque chose comme
line.Replace(line.Split(' ').Last(), "NUM");
POC: .Net Fiddle
Si vous souhaitez remplacer les nombres par
NUM, utilisez(? <= Foo) \ d + (? =;)pour remplacer parNUM