2014-02-27 115 views
2

在C#中枚舉正則表達式替換的最佳方式是什麼?C#枚舉正則表達式匹配

例如,如果我想每一個「<意圖過濾器」比賽由替換爲「<意向過濾器的android:標籤=標籤#」。 #號是增量數字。編碼它的最好方法是什麼?

回答

3

您可以在指定爲MatchEvaluator回調的匿名方法中使用遞增的計數器。 (?<=…)是積極向後看的;它由正則表達式評估器匹配,但未被移除。

string input = "a <intent-filter data=a /> <intent-filter data=b />"; 
int count = 0; 
string result = Regex.Replace(input, @"(?<=\<intent-filter)", 
    _ => " android:label=label" + count++); 
+0

+1 :-)哦!閃亮!可能是'_(match)=>「android:label = label」+ count ++);'?因爲http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator(v = vs.110).aspx –

+0

@DarenThomas:'_'被用作* de facto *約定匿名方法中的參數名稱將不會在方法體中使用。你可以使用'match =>'來代替。 – Douglas

+0

啊!你是對的!這是這樣的「我也知道!」我的時刻。捂臉!這是正確的答案! –

2

不要打擾這個正則表達式。按照以下方式做點什麼:

var pieces = text.Split(new string[] { "xx" }); 
var sb = new StringBuilder(); 
var idx = 0; 
foreach (var piece in pieces) 
{ 
    sb.Append(piece); 
    sb.Append(" android:label=label"); 
    sb.Append(idx); 
} 
// oops, homework assignment: remove the last "<intent-filter android:label=label#"