To jest łańcuch wejściowy 23x * y34x2
. Chcę wstawić " * "
(gwiazdka otoczona białymi znakami) po każdej cyfrze, po której następuje litera, a po każdej literze, po której następuje liczba. Mój ciąg wejściowy będzie wyglądał następująco: 23 * x * y * 34 * x * 2
.Jak działa MatchEvaluator w Regex.Replace?
To jest wyrażenie regularne, które wykonuje zadanie: @"\d(?=[a-z])|[a-z](?=\d)"
. Jest to funkcja, którą napisałem, która wstawia " * "
.
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
Moje pytanie, jak wykonać tę samą pracę za pomocą .net MatchEvaluator
? Jestem nowy, aby wyrejestrować się i nie rozumiem, że dobrze zastąpić MatchEvaluator
. Jest to kod, który próbowałem napisał:
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, rozumiem – dontoo
Chciałbym wspomnieć, że od dodania wyrażenia lambda 'delegate (Dopasuj m) {return m.Value +" * "; } 'można zastąpić przez' (Dopasuj m) => return m.Value + "*"; '. Yay postęp. – Pharap
^które można jeszcze bardziej uprościć jako '' (m) => m.Value + "*" ' – m1kael