2014-02-27 3 views
2

C#에서 정규식 대체를 열거하는 가장 좋은 방법은 무엇입니까? 나는 모든 "< 의도 필터" 경기를 원했다 예를 들어 C# 정규식 열거를 열거하십시오

로 대체 할 "< 의도 필터 안드로이드 : 라벨 = 라벨 #"합니다. # 기호는 증분 숫자입니다. 코드를 작성하는 가장 좋은 방법은 무엇입니까?

답변

3

MatchEvaluator 콜백으로 지정된 익명 메서드에서 증가 된 카운터를 사용할 수 있습니다. (?<=…)은 긍정적 인 표정입니다. regex 평가자와 일치하지만 제거되지는 않습니다.

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 :-) ooh! 빛나는! "_ (match) =>"android : label = label "+ count ++); 왜냐하면 http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator(v=vs.110).aspx –

+0

@DarenThomas :'_'은 사실상 * 관습으로 사용됩니다. 메소드 본문에서 사용되지 않는 익명 메소드의 매개 변수 이름. 'match =>'대신에'match =>'를 사용할 수 있습니다. – Douglas

+0

아아! 네가 옳아! 이것은 그런 "나는 그것을 역시 알고 있었다!" 나를위한 순간. Facepalm! 이것은 정답입니다! –

2

Regexes와 관련해서는 신경 쓰지 마세요.

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#" 
관련 문제