1

我有一个字符串,其中“特殊区域”用花括号括起来:

{intIncG}/{intIncD}/02-{yy}

我需要遍历 {} 之间的所有这些元素并根据它们的内容替换它们。在 C# 中执行此操作的最佳代码结构是什么?

我不能只做一个替换,因为我需要知道每个“特殊区域{}”的索引才能用正确的值替换它。

4

4 回答 4

2

string.Replace会做得很好。

var updatedString = myString.Replace("{intIncG}", "something");

对每个不同的字符串执行一次。


更新:

由于您需要索引{来生成替换字符串(正如您评论的那样),您可以使用Regex.Matches查找索引{- 集合中的每个Match对象Matches都将包含字符串中的索引。

于 2012-07-12T10:16:57.700 回答
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

}
于 2012-07-12T10:33:53.207 回答
0

使用Regex.Replace

用指定的替换字符串替换所有出现的由正则表达式定义的字符模式。

来自 msdn

于 2012-07-12T10:19:22.950 回答
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));
于 2012-07-12T10:22:03.813 回答