9
votes

Comment puis-je utiliser une valeur calculée dans une opération de remplacement de regex dans C #?

Je cherche un moyen d'utiliser la longueur d'un groupe de match dans l'expression de remplacement avec la fonction C # Regex.replace.

c'est-à-dire que puis-je remplacer ??? Avec dans l'exemple suivant, pour obtenir la sortie souhaitée ci-dessous?

Exemple: xxx

Sortie souhaitée < / strong> xxx

Note: Il s'agit d'un exemple extrêmement artificiel / simplifié pour démontrer la question. Je me rends compte pour cet exemple une expression régulière n'est pas la façon idéale de le faire. Faites-moi simplement confiance que l'application du monde réel de la réponse fait partie d'un problème plus complexe qui nécessite l'utilisation d'une regex remplacer ici.


0 commentaires

3 Réponses :


9
votes

Essayez d'utiliser la version de Regex.replace qui appelle une fonction pour déterminer ce que le texte de remplacement doit être le suivant: xxx

http://msdn.microsoft.com/en-us/library/aa332127 (vs.71) .aspx

La fonction pourrait alors regarder le texte correspondant (l'objet est fourni comme argument à la fonction d'évaluateur) et renvoie une chaîne avec le bon Valeur calculée.


1 commentaires

Merci. Je pensais que j'avais besoin de faire ça, mais avant de descendre cette route, je voulais juste voir s'il y avait un mot-clé reconnu par Remplacer pour rendre cette opération plus simple. Néanmoins, vous avez mon uppote et si personne ne répond avec une manière abrégée pour accomplir cela, je vais accepter cette réponse.



3
votes

Essayez xxx

avec l'exemple de matchvaluator ci-dessous xxx

(partiellement volé du livre de recettes d'expressions ordinaires - ma Bible haha) < / p>


0 commentaires

13
votes

Si vous utilisez C # 3, vous pouvez simplement créer un matchValuator à partir d'une expression Lambda: xxx

in c # 2, vous pouvez utiliser un délégué: xxx


2 commentaires

En C # 4 au moins Création d'un Nouveau Matchevaluator n'est pas nécessaire, l'expression Lambda peut être utilisée directement.


String val = regex.replace ("xxx", @ "(? x {1,6})", m => m.groups ["exes"]. Valeur [0] + "-" + m. Groupes ["exes"]. Valeur.length.Tostring ());