1
votes

Regex remplace la correspondance trouvée par un mot statique

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?


1 commentaires

Si vous souhaitez remplacer les nombres par NUM , utilisez (? <= Foo) \ d + (? =;) pour remplacer par NUM


3 Réponses :


4
votes

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.

Démo Regex | Démo C #

 entrez la description de l'image ici p >


1 commentaires

vient d'ajouter ceci (Foo) \\ s * \\ d +; donc nous n'avons pas besoin de définir l'espace manuellement, je pense



0
votes

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:

test regex


0 commentaires

1
votes

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


0 commentaires