c# - 用于字符串操作的正则表达式模式

标签 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

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

最佳答案

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

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

替换为string.Empty .

参见demo

结果:

enter image description here

正则表达式说明:

该模式包含 2 个替代项(请注意 | 替代运算符)。

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

    • (?<=}) - 积极的回顾,确保有 }
    • \s* - 0 个或多个 ( * ) 空格 ( \s )
    • (?={) - 积极的前瞻,确保有 {就在空格之后
  2. {\s*\d+\s*} :

    • { - 匹配{从字面上看
    • \s* - 0 个或多个 ( * ) 空格 ( \s )
    • \d+ - 1 位或多位数字
    • \s* - 0 个或多个 ( * ) 空格 ( \s )
    • } - 匹配}从字面上看。

关于c# - 用于字符串操作的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538231/

相关文章:

c# - 删除C#.net中Infragistics UltraListView的所有项目

javascript - Sizzle 的 CLASS Javascript 正则表达式?

regex - 正则表达式程序不打印

regex - 尽管在 Linux 中使用了 "[ ]"(转义序列),但在 egrep 中使用 "\"时获得了特殊的结果

c# - F# 屈服! operator - 实现和可能的 C# 等价物

c# - 从 .net 客户端获取有关 WCF ssl 证书的到期日期/详细信息

c# - 如何创建二叉树

regex - 需要 SED 或 AWK 脚本来做 strlen 优化

javascript - String.replace 的转义 $ 符号

c# - Sitecore 链接未添加属性