Supposons que j'ai le regex suivant:
-(\d+)-
et je veux remplacer, en utilisant C #, le groupe 1 (\d+)
par AA
, pour obtenir:
-AA-
Maintenant, je le remplace en utilisant:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Mais je n'aime pas vraiment ça, car si je change le modèle pour qu'il corresponde à la _(\d+)_
place, je devrai aussi changer la chaîne de remplacement _AA_
, et c'est contraire au principe DRY.
Je recherche quelque chose comme:
Gardez le texte correspondant exactement comme il est, mais changez le groupe 1 par this text
et le groupe 2 par another text
...
Edit:
Ce n'était qu'un exemple. Je cherche juste une manière générique de faire ce que j'ai dit ci-dessus.
Cela devrait fonctionner pour:
anything(\d+)more_text
et n'importe quel modèle que vous pouvez imaginer.
Tout ce que je veux faire, c'est remplacer uniquement les groupes et conserver le reste du match.
:)
. À mon avis, cette solution est bien meilleure et plus propre que l'utilisation d'anticipation et de regard en arrière..Value
àm.Groups[1]
etc.(?:foo)(bar)
,$1
remplacerabar
. plus de détailsVous pouvez le faire en utilisant lookahead et lookbehind :
la source
J'en avais également besoin et j'ai créé la méthode d'extension suivante pour cela:
Usage:
Résultat:
la source
Si vous ne souhaitez pas modifier votre modèle, vous pouvez utiliser les propriétés Index de groupe et Longueur d'un groupe correspondant.
la source
Voici une autre belle option propre qui ne nécessite pas de changer votre modèle.
la source
passez par le codage ci-dessous pour obtenir le remplacement de groupe séparé.
la source
Voici une version similaire à celle de Daniel mais remplaçant plusieurs correspondances:
la source