字符串操作的正则表达式模式

时间:2015-07-21 11:48:16

标签: c# regex

我有以下一行:

{ "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

有人可以指出我的模式有什么问题吗?

1 个答案:

答案 0 :(得分:5)

您可以使用以下正则表达式:

(?<=})\s*(?={)|{\s*\d+\s*}

替换为string.Empty

请参阅demo

结果:

enter image description here

REGEX EXPLANATION

该模式包含2个备选方案(请注意|交替运算符)。

  1. (?<=})\s*(?={)

    • (?<=}) - 确保有}
    • 的正面观察
    • \s* - 0或更多(*)空格(\s
    • (?={) - 一个积极的前瞻,确保在空白之后有{
  2. {\s*\d+\s*}

    • { - 字面上匹配{
    • \s* - 0或更多(*)空格(\s
    • \d+ - 一位或多位
    • \s* - 0或更多(*)空格(\s
    • } - 字面上匹配}