删除空格,除非在引号内,忽略转义引号
本文关键字:转义 空格 删除 | 更新日期: 2023-09-27 18:30:13
我有一个JSON字符串,我想在其中删除所有不在引号内的空格。我在网上搜索,我已经找到了一个解决方案,如下所示:
aidstring = Regex.Replace(aidstring, "''s+(?=([^'"]*'"[^'"]*'")*[^'"]*$)", "");
然而,我现在处理的是一个包含转义引号的字符串:
"boolean": "k near/3 '"funds private'""
上面的正则表达式解决方案将其转化为:
"boolean":"k near/3 '"fundsprivate'""
由于转义引号被视为普通引号。
有人能发布一个正则表达式,其中忽略转义引号吗?
我建议使用
aidstring = Regex.Replace(aidstring, @"(""[^""'']*(?:''.[^""'']*)*"")|'s+", "$1");
参见regex演示
正则表达式将所有引用C的字符串匹配到捕获组1中,使用$1
时,这些字符串将在结果中恢复,但使用's+
捕获的所有空白将被删除。
Regex解释:
备选方案1:
("[^"'']*(?:''.[^"'']*)*")
:"
-文字"
[^"'']*
-除'
或"
之外的零个或多个字符(?:''.[^"'']*)*
-零个或多个序列。。。''.
-'
和除换行符以外的任何字符[^"'']*
-除'
或"
之外的零个或多个字符
"
-文字"
备选方案2:
's+
-1个或多个空白(在.NET中,任何Unicode空白)
只是一个想法。。。这并不是立即看起来合法的,因为有明显的可能的缺陷。但如果你仔细想想,失败的可能性几乎为零:
Regex.Replace(aidstring, @"'"'s*:'s*'"", "'":'"");
长话短说,寻找想要替换的空间,而不是寻找所有不想替换的空间:
"boolean" : "k near/3 '"funds private'""
^^^^^^^^^
它唯一失败的时候是json对象的实际值内容实际上是冒号。。。请告诉我这种情况发生的频率。:)
但斯基特是最正确的。使用Json Parser进行清理。