我有一个字符串,其中“特殊区域”用花括号括起来:
{intIncG}/{intIncD}/02-{yy}
我需要遍历 {} 之间的所有这些元素并根据它们的内容替换它们。在 C# 中执行此操作的最佳代码结构是什么?
我不能只做一个替换,因为我需要知道每个“特殊区域{}”的索引才能用正确的值替换它。
我有一个字符串,其中“特殊区域”用花括号括起来:
{intIncG}/{intIncD}/02-{yy}
我需要遍历 {} 之间的所有这些元素并根据它们的内容替换它们。在 C# 中执行此操作的最佳代码结构是什么?
我不能只做一个替换,因为我需要知道每个“特殊区域{}”的索引才能用正确的值替换它。
Regex rgx = new Regex( @"\({[^\}]*\})");
string output = rgx.Replace(input, new MatchEvaluator(DoStuff));
static string DoStuff(Match match)
{
//Here you have access to match.Index, and match.Value so can do something different for Match1, Match2, etc.
//You can easily strip the {'s off the value by
string value = match.Value.Substring(1, match.Value.Length-2);
//Then call a function which takes value and index to get the string to pass back to be susbstituted
}
你可以定义一个函数并加入它的输出——所以你只需要遍历一次而不是每个替换规则。
private IEnumerable<string> Traverse(string input)
{
int index = 0;
string[] parts = input.Split(new[] {'/'});
foreach(var part in parts)
{
index++;
string retVal = string.Empty;
switch(part)
{
case "{intIncG}":
retVal = "a"; // or something based on index!
break;
case "{intIncD}":
retVal = "b"; // or something based on index!
break;
...
}
yield return retVal;
}
}
string replaced = string.Join("/", Traverse(inputString));