我有一个字符串,其中“特殊区域”用大括号括起来:
{intIncG}/{intIncD}/02-{yy}
我需要在{}之间迭代所有这些元素,并根据它们的内容替换它们。在C#中使用它的最佳代码结构是什么?
我不能只进行替换,因为我需要知道每个“speacial area {}”的索引,以便用正确的值替换它。
答案 0 :(得分:2)
string.Replace
会做得很好。
var updatedString = myString.Replace("{intIncG}", "something");
为每个不同的字符串做一次。
更新
由于您需要{
的索引才能生成替换字符串(与commented一样),因此您可以使用Regex.Matches
查找索引{
- Matches
集合中的每个Match
对象都将包含字符串中的索引。
答案 1 :(得分:2)
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
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以定义一个函数并加入它的输出 - 因此您只需要遍历一次部分而不是每个替换规则。
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));