226 votes

Remplacer uniquement certains groupes avec Regex

Supposons que j'ai la regex suivante:

-(\d+)-

et je veux remplacer, à l'aide de C#, le Groupe de 1 (\d+) avec AA, pour obtenir:

-AA-

Maintenant, je suis en remplacement de l'aide:

var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-"); 

Mais je n'aime pas vraiment cela, parce que si je change de modèle pour correspondre _(\d+)_ au lieu de cela, je vais devoir changer la chaîne de remplacement en _AA_ trop, et c'est contre le principe DRY.

Je suis à la recherche de quelque chose comme:

Garder le texte correspondant exactement comment il est, mais le changement de Groupe 1 en this text du Groupe 2, en another text...

Edit:
C'était juste un exemple. Je suis à la recherche d'un générique façon de faire ce que j'ai dit ci-dessus.

Il doit travailler pour:

anything(\d+)more_text et de motifs que vous pouvez imaginer.

Tout ce que je veux faire est de remplacer uniquement les groupes, et de garder le reste du match.

373voto

bluepnume Points 3587

Une bonne idée pourrait être d’encapsuler tout à l’intérieur de groupes, n’importe si besoin de les identifier ou non. De cette façon vous pouvez les utiliser dans votre chaîne de remplacement. Par exemple :

ou en utilisant un MatchEvaluator :


Une autre façon, un peu en désordre, pourrait utiliser une postanalyse/recherche avancée :

``

37voto

LukeH Points 110965

Vous pouvez le faire à l’aide de préanalyse et postanalyse:

24voto

Daniel Hilgarth Points 90722

J’ai aussi eu besoin de cela et j’ai créé la méthode d’extension suivantes pour cela :

Utilisation :

Résultat :

13voto

Dick Verweij Points 41

Si vous ne voulez pas changer votre modèle, vous pouvez utiliser les propriétés Group Index et la longueur d’un groupe correspondant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X