用于替换所有大括号的正则表达式,但大小写“{0}”除外

Regex to replace all curly braces except for the case '{0}'

我想验证一个字符串:

所以:'AbC{de{0} x{1}}' 必须变成 'AbCde{0} x1'

我试过这个:

value = Regex.Replace(value, @"({|})+(?!{0})", string.Empty);

但这给了我错误:

Regex issue: Quantifier(x,y) following nothing.

怎么了?

您可以使用

Regex.Replace(text, @"(\{0})|[{}]", "")

或者,支持 {...}

中的任何 ASCII 数字
Regex.Replace(text, @"(\{[0-9]+})|[{}]", "")

regex demo

详情

  • (\{0}) - 捕获第 1 组(</code> 从替换字符串中引用此值):一个 <code>{0} 子字符串
  • | - 或
  • [{}] - {}.

另一种环顾四周的方法是可能的:

Regex.Replace(text, @"{(?!0})|(?<!{0)}", string.Empty)

参见 another regex demo。在这里,{(?!0}) 匹配 { 后面没有 0} 并且 (?<!{0)} 匹配 } 前面没有 {0.

您可以使用环顾四周来实现您的目标:\{(?!0\})|(?<!\{0)\}

解释:

\{(?!0\}) - 匹配 { 如果它后面没有 0}(由于负先行)

| - 交替

(?<!\{0)\} - 如果前面没有 {0 则匹配 }(由于反向回溯)

Demo

代码示例:

Regex.Replace("AbC{de{0} x{1}}", @"{(?!0\})|(?<!\{0)\}", "")