Questa è la stringa di input 23x * y34x2
. Voglio inserire " * "
(stella circondata da spazi bianchi) dopo ogni numero seguito da una lettera e dopo ogni lettera seguita da un numero. Quindi la mia stringa di input sarebbe simile a questa: 23 * x * y * 34 * x * 2
.Come funziona MatchEvaluator in Regex.Replace?
Questa è la regex che esegue il lavoro: @"\d(?=[a-z])|[a-z](?=\d)"
. Questa è la funzione che ho scritto che inserisce lo " * "
.
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
La mia domanda come fare lo stesso lavoro utilizzando .net MatchEvaluator
? Sono nuovo di regex e non capisco la buona sostituzione con MatchEvaluator
. Questo è il codice che ho cercato di scritto:
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, ho capito – dontoo
Mi piacerebbe menzionare che dall'aggiunta delle espressioni lambda 'delegate (Match m) {return m.Value +" * "; } 'può essere sostituito da' (Match m) => return m.Value + "*"; '. Yay progressi. – Pharap
^che può essere ulteriormente semplificato come '(m) => m.Valore +" * "' – m1kael