正则表达式-在特定情况下替换C#字符串中的字符

时间:2018-10-26 12:47:29

标签: c# regex string replace

仅当在方括号之间没有数字时,我才想将所有方括号替换为输入字符串中的另一个方括号。我写了这个工作示例代码:

    string pattern = @"(\{[^0-9]*?\})";
                MatchCollection matches = Regex.Matches(inputString, pattern);
                if(matches != null)
                {
                    foreach (var match in matches)
                    {
                        string outdateMatch = match.ToString();
                        string updateMatch = outdateMatch.Replace('{', '[').Replace('}', ']');
                        inputString = inputString.Replace(outdateMatch, updateMatch);
                    }
                }

因此:

string inputString = "{0}/{something}/{1}/{other}/something"

结果将是:

inputString = "{0}/[something]/{1}/[other]/something"

是否可以使用Regex.Replace()方法在一行中执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以使用

var output = Regex.Replace(input, @"\{([^0-9{}]*)}", "[$1]");

请参见regex demo

详细信息

  • \{-一个{字符
  • ([^0-9{}]*)-捕获组1:0个或多个除数字{}以外的字符
  • }-一个}字符。

替换为[$1],第1组的内容用方括号括起来。

答案 1 :(得分:0)

Regex.Replace(input, @"\{0}/\{(.+)\}/\{1\}/\{(.+)}/(.+)", "{0}/[$1]/{1}/[$2]/$3")

答案 2 :(得分:0)

你能做到吗?

Regex.Replace(inputString, @"\{([^0-9]*)\}", "[$1]");

也就是说,捕获“数字”部分,然后只返回用大括号替换的字符串。

不确定这是否正是您所追求的,但这似乎符合问题:)