34
這是輸入字符串23x * y34x2
。我想在每個數字後加上一個字母,並在每個字母后跟數字後插入" * "
(星號包圍空格)。所以我的輸入字符串看起來像這樣:23 * x * y * 34 * x * 2
。Regex.Replace中的MatchEvaluator如何工作?
這是執行這項工作的正則表達式:@"\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??
}
thx,我明白 – dontoo 2010-04-06 20:38:03
我想提一下,因爲增加了lambda表達式'delegate(Match m){return m.Value +「*」; }'可以被替換爲'(Match m)=> return m.Value +「*」;'。耶進展。 – Pharap 2014-11-09 07:44:15
^可以進一步簡化爲'(m)=> m.Value +「*」' – m1kael 2015-10-16 00:18:10