Esta es la cadena de entrada 23x * y34x2
. Quiero insertar " * "
(estrella rodeada de espacios en blanco) después de cada número seguido de una letra, y después de cada letra seguida de un número. Así que mi cadena de entrada se vería así: 23 * x * y * 34 * x * 2
.¿Cómo funciona MatchEvaluator en Regex.Replace?
Esta es la expresión regular que hace el trabajo: @"\d(?=[a-z])|[a-z](?=\d)"
. Esta es la función que escribí que inserta el " * "
.
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
Mi pregunta de cómo hacer el mismo trabajo usando .net MatchEvaluator
? Soy nuevo en Regex y no entiendo bien reemplazando con MatchEvaluator
. Este es el código que he intentado escribió:
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, entiendo – dontoo
Me gustaría mencionar que desde la adición de las expresiones lambda 'delegate (Match m) {return m.Value +" * "; } 'puede ser reemplazado por' (Match m) => return m.Value + "*"; '. Yay progreso. – Pharap
^que se puede simplificar aún más simplemente como '(m) => m.Value +" * "' – m1kael