Это входная строка 23x * y34x2
. Я хочу вставить " * "
(звездочка, окруженная пробелами) после каждого числа, за которым следует буква, и после каждой буквы, за которой следует число. Поэтому моя строка ввода будет выглядеть так: 23 * x * y * 34 * x * 2
.
Это регулярное выражение, которое делает работу: @"\d(?=[a-z])|[a-z](?=\d)"
. Это функция, которую я написал, которая вставляет " * "
.
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
Мой вопрос, как выполнить ту же работу, используя .net MatchEvaluator
? Я новичок в регулярных выражениях и не понимаю, как правильно заменить на MatchEvaluator
. Это код, который я пытался написать:
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??
}