Ceci est la chaîne d'entrée 23x * y34x2
. Je veux insérer " * "
(étoile entourée d'espaces) après chaque nombre suivi d'une lettre, et après chaque lettre suivie d'un nombre. Donc, ma chaîne d'entrée ressemblerait à ceci: 23 * x * y * 34 * x * 2
.Comment fonctionne MatchEvaluator dans Regex.Replace?
Voici la regex qui fait le travail: @"\d(?=[a-z])|[a-z](?=\d)"
. C'est la fonction que j'ai écrite qui insère le " * "
.
Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)");
MatchCollection matchC;
matchC = reg.Matches(input);
int ii = 1;
foreach (Match element in matchC)//foreach match I will find the index of that match
{
input = input.Insert(element.Index + ii, " * ");//since I' am inserting " * " (3 characters)
ii += 3; //I must increment index by 3
}
return input; //return modified input
Ma question comment faire le même travail en utilisant .net MatchEvaluator
? Je suis nouveau à regex et ne comprends pas le bon remplacement avec MatchEvaluator
. Voici le code que j'ai essayé de écrit:
Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)");
MatchEvaluator matchEval = new MatchEvaluator(ReplaceStar);
input = reg.Replace(input, matchEval);
return input;
}
public string ReplaceStar(Match match)
{
//return What??
}
thx, je comprends – dontoo
Je voudrais mentionner que depuis l'ajout des expressions lambda 'delegate (Match m) {return m.Value +" * "; } 'peut être remplacé par' (Match m) => return m.Value + "*"; '. Yay progrès. – Pharap
^qui peut encore être simplifié comme juste '(m) => m.Value +" * "' – m1kael