我有以下行:
{ "diameter":6 } { 60 } {"din":Anchor-1 R 6/5SPx3} {"length":30 } { Impact anchor } {"diameter":6 } { Online:0 } {, de03042 }
我正在尝试删除以下内容:
- 每个左大括号和右大括号之间有空格,例如
{ "diameter":6 } { 60 }
更改为{ "diameter":6 }{ 60 }
- 任何内部有数字的开括号和闭括号。在这种情况下,
{ 60}
将从输出中消失。
我正在使用以下模式,但它没有给出所需的输出。
s = Regex.Replace(s, @"\s+[{}^]", ""); //Remove whitespace between each element
s = Regex.Replace(s, @"{{ [0-9^}]*}\}", ""); // Remove { 60 }
期望的输出:
{ "diameter":6 }{"din":Anchor-1 R 6/5SPx3}{"length":30 }{ Impact anchor } {"diameter":6 }{ Online:0 }{, de03042 }
当前输出:
{ "diameter":660"din":Anchor-1 R 6/5SPx3}"length":30 Impact anchor HPS-1 R 6/5SPx3"diameter":6 Online:0 de03042
有人可以指出我的模式有什么问题吗?
最佳答案
您可以使用以下正则表达式:
(?<=})\s*(?={)|{\s*\d+\s*}
替换为string.Empty
.
参见demo
结果:
正则表达式说明:
该模式包含 2 个替代项(请注意 |
替代运算符)。
(?<=})\s*(?={)
:-
(?<=})
- 积极的回顾,确保有}
-
\s*
- 0 个或多个 (*
) 空格 (\s
) -
(?={)
- 积极的前瞻,确保有{
就在空格之后
-
{\s*\d+\s*}
:-
{
- 匹配{
从字面上看 -
\s*
- 0 个或多个 (*
) 空格 (\s
) -
\d+
- 1 位或多位数字 -
\s*
- 0 个或多个 (*
) 空格 (\s
) -
}
- 匹配}
从字面上看。
-
关于c# - 用于字符串操作的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538231/