don*_*too 43 .net c# regex replace matchevaluator
这是输入字符串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
Run Code Online (Sandbox Code Playgroud)
我的问题是如何使用.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??
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 63
一个MatchEvaluator是一个委托,需要一个匹配对象,并返回应该被替换,而不是匹配的字符串.您还可以参考比赛中的组.您可以按如下方式重写代码:
string input = "23x * y34x2";
Regex reg = new Regex(@"\d(?=[a-z])|[a-z](?=\d)");
string result = reg.Replace(input, delegate(Match m) {
return m.Value + " * ";
});
Run Code Online (Sandbox Code Playgroud)
为了举例说明这是如何工作的,第一次调用委托时,Match参数将匹配字符串"3"
.在这种情况下,委托被定义为将匹配本身作为与其连接的字符串返回" * "
.所以第一个"3"
被替换为"3 * "
.
该过程以这种方式继续,为原始字符串中的每个匹配调用一次委托.
归档时间: |
|
查看次数: |
26891 次 |
最近记录: |