Đây là chuỗi đầu vào 23x * y34x2
. Tôi muốn chèn " * "
(ngôi sao được bao quanh bởi khoảng trắng) sau mỗi số theo sau là chữ cái và sau mỗi chữ cái theo sau là số. Vì vậy, chuỗi đầu vào của tôi sẽ trông như thế này: 23 * x * y * 34 * x * 2
.Công cụ MatchEvaluator trong Regex.Replace hoạt động như thế nào?
Đây là regex thực hiện công việc: @"\d(?=[a-z])|[a-z](?=\d)"
. Đây là chức năng mà tôi đã viết mà chèn " * "
.
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
Câu hỏi của tôi về cách thực hiện công việc tương tự bằng cách sử dụng .net MatchEvaluator
? Tôi mới để regex và không hiểu tốt thay thế bằng MatchEvaluator
. Đây là mã mà tôi cố gắng viết:
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, tôi hiểu – dontoo
Tôi muốn đề cập rằng kể từ khi thêm biểu thức lambda 'delegate (Match m) {return m.Value +" * "; } 'có thể được thay thế bằng' (Kết hợp m) => trả về m.Value + "*"; '. Yay tiến bộ. – Pharap
^có thể được đơn giản hóa hơn nữa chỉ là '(m) => m.Value +" * "' – m1kael