用于替换所有大括号的正则表达式,但大小写“{0}”除外
Regex to replace all curly braces except for the case '{0}'
我想验证一个字符串:
- 它可能包含零到多次出现的
{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]+})|[{}]", "")
详情
(\{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
则匹配 }
(由于反向回溯)
代码示例:
Regex.Replace("AbC{de{0} x{1}}", @"{(?!0\})|(?<!\{0)\}", "")
我想验证一个字符串:
- 它可能包含零到多次出现的
{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})|[{}]", "")
或者,支持 {...}
、
Regex.Replace(text, @"(\{[0-9]+})|[{}]", "")
详情
(\{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
则匹配 }
(由于反向回溯)
代码示例:
Regex.Replace("AbC{de{0} x{1}}", @"{(?!0\})|(?<!\{0)\}", "")